android - 广播接收器中的权限拒绝
问题描述
我正在尝试从应用程序 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>
应用 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)?
抱歉,如果我写了太多代码,但这些是可能出现错误的必要部分。
谢谢。
解决方案
Android O 有一个隐式广播限制,你是在 Android o 或更高版本上运行的吗? https://developer.android.com/about/versions/oreo/background,搜索“广播限制”
推荐阅读
- python - Protobuf,python3.6编译后导入错误
- visual-studio - 源代码管理资源管理器的最新列中的内容
- networking - Guzzle故障排除速度/慢
- directx-12 - 有没有办法以字符串形式接收来自 DX12 的错误?
- python - 游戏的循环问题
- r - tidyr::gather - 在省略号上操作
- python - ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all
- java - 如何使用会话属性获取数据?帮我解决这个问题
- microsoft-graph-api - Microsoft Graph API - 通过文件路径获取文件 - 404 Not Found
- go - Golang - 如何创建回调通知