其他分享
首页 > 其他分享> > Android-无法启用BroadcastReceiver

Android-无法启用BroadcastReceiver

作者:互联网

升级到最新的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);
}

因此在上面的代码中,因为pm.setComponentEnabledSetting()引发SecurityException,所以永远不会执行startAlarm()

我是否在清单中缺少任何安全设置?目前我有:

<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开发,它过去可以正常工作

附言它发生在手机和模拟器上

解决方法:

在manifest.xml中,您将添加

<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
android:sharedUserId="android.uid.system"

在Android.mk中将添加

LOCAL_CERTIFICATE := platform  

这就是全部.

标签:broadcastreceiver,securityexception,android
来源: https://codeday.me/bug/20191106/2001834.html