【发布时间】: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)?
对不起,如果我写了太多代码,但这些是可能出现错误的必要部分。
谢谢。
【问题讨论】:
-
尝试使用:
<!-- Permission declaration for updating widget content --> <permission android:name="com.example.cataloguemoviefinal.UPDATE_WIDGET_DATA" />和<uses-permission android:name="com.example.cataloguemoviefinal.receiver.UPDATE_WIDGET_DATA"/>,但似乎也无法传递消息 -
错误:
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