【问题标题】:Permission Denial in Broadcast receiver广播接收器中的权限拒绝
【发布时间】:2019-08-20 00:31:55
【问题描述】:

我正在尝试将广播接收器从应用 B 发送到 A,但由于错误消息(见下文)似乎无法通信。此外,我试图在此论坛中搜索解决特定问题的答案,但由于情况不同,它们似乎对我没有帮助。

错误:

2019-03-28 07:24:23.973 1636-1650/? W/BroadcastQueue: Permission Denial: receiving Intent { act=com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA flg=0x30 } to com.example.cataloguemoviefinal/receiver.UpdateWidgetDataReceiver requires com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA due to sender com.example.favoritefilmapp (uid 10147)

清单:

应用 A 中的权限:

<!-- Permission declaration for updating widget content -->
    <permission
        android:name="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA" />

应用 A 中的接收器:

<!-- Custom Broadcast receiver -->
        <receiver
            android:name=".receiver.UpdateWidgetDataReceiver"
            android:permission="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA"/>
            </intent-filter>
        </receiver>

App A 中的广播接收器:

public class UpdateWidgetDataReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Log.d("Action intent", intent.getAction());

        if(intent.getAction() != null){
            if(intent.getAction().equals("com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA")){
                // Log message
                Log.d("Testing receiver", "I got ur updates");

                AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

                int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, FavoriteMovieItemWidget.class));

                appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.favorite_movie_stack_view);
            }

        }
    }
}

应用 B 中的清单:

 <!-- This code is used for custom BroadcastReceiver -->
    <uses-permission android:name="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA"/>

App B 中的发送消息:

// Intent for broadcast receiver
        Intent broadcastIntent = new Intent();
        // Add flags to intent which can be communicated with closed app package (idk if its true)
        broadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        // Set action
        broadcastIntent.setAction("com.example.cataloguemoviefinal.ACTION_UPDATE_WIDGET_DATA");
        // Sent broadcast to receiver (use permission)
        sendBroadcast(broadcastIntent, "com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA");

我应该怎么做才能让广播接收器从应用 B 接收到 A 的消息(显示 Log.message)?

对不起,如果我写了太多代码,但这些是可能出现错误的必要部分。

谢谢。

【问题讨论】:

  • 尝试使用:&lt;!-- Permission declaration for updating widget content --&gt; &lt;permission android:name="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA" /&gt;&lt;uses-permission android:name="com.example.cataloguemoviefinal.receiver.UPDATE_WIDGET_DATA"/&gt;,但似乎也无法传递消息
  • 错误:2019-03-28 08:17:04.887 1636-1650/? W/BroadcastQueue: Background execution not allowed: receiving Intent { act=com.example.cataloguemoviefinal.receiver.ACTION_UPDATE_WIDGET_DATA flg=0x30 } to com.example.cataloguemoviefinal/.receiver.UpdateWidgetDataReceiver

标签: android permissions receiver


【解决方案1】:

Android O 有一个隐式广播限制,你是在 Android o 或更高版本上运行的吗? https://developer.android.com/about/versions/oreo/background,搜索“广播限制”

【讨论】:

  • 是的,我忘记更新了,由于签名对广播限制有异常,我使用权限保护级别签名来处理它
猜你喜欢
  • 2018-01-20
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2011-04-18
  • 2021-07-14
  • 2016-03-24
相关资源
最近更新 更多