Android-无法启用Broadcastreceiver
-
20-09-2019 - |
题
升级到最新的SDK后,我回到了小部件开发项目,突然之间,我的小部件在此消息中失败了:
ERROR/AndroidRuntime(5296): java.lang.RuntimeException:
Unable to start receiver topjob.widget.SearchWidget:
java.lang.SecurityException: Permission Denial:
attempt to change component state from pid=5296, uid=10057, package uid=10048
这是发生例外的两行代码:
@Override
public void onEnabled(Context context) {
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(new ComponentName("topjob",
".widget.SearchWidgetBroadcastReceiver"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
startAlarm(context, UPDATE_RATE_SEC);
}
因此在上面的代码中 startAlarm()
从未执行过,因为 pm.setComponentEnabledSetting()
抛出SecurityException
我的清单中是否缺少任何安全设置?目前我有:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我正在发展 SDK v. 1.5
而且过去正常工作
ps发生在电话和模拟器上
解决方案 3
好的 - 这不是真正的回答,而是解决方法。如果有人想介入并提供有关如何做到这一点的答案或解释,我将很乐意接受。无论如何 - 我通过更改来工作 newState
旗帜来自 COMPONENT_ENABLED_STATE_ENABLED
至 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
. 。由于我的广播接收器已在清单中启用了状态,因此可以正常工作
其他提示
在清单上,您将添加
<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
android:sharedUserId="android.uid.system"
在android.mk上会添加
LOCAL_CERTIFICATE := platform
这是所有的了。
您可以尝试在清单中添加此权限吗?
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
我只有此错误“ java.lang.securityexception:denial denial:”当我尝试将某些组件从其运行的软件包中禁用时。否则,我取得了成功。
不隶属于 StackOverflow