代码之家  ›  专栏  ›  技术社区  ›  Bostone

Android-无法启用广播接收器

  •  3
  • Bostone  · 技术社区  · 14 年前

    在升级到最新的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 它以前很好用

    另外,它发生在电话和模拟器上

    4 回复  |  直到 12 年前
        1
  •  3
  •   Jason Sturges    12 年前

    在manifest.xml中,您将添加

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

    在android.mk上会添加

    LOCAL_CERTIFICATE := platform  
    

    这就是全部。

        2
  •  1
  •   basv    12 年前

    您可以尝试在您的清单中添加此权限吗?

    <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
    
        3
  •  0
  •   Bostone    14 年前

    好吧-这不是真正的答案,而是一个变通办法。如果有人想介入,就应该如何做提供答案或解释,我很乐意接受。 不管怎样-我通过改变 newState 旗从 COMPONENT_ENABLED_STATE_ENABLED PackageManager.COMPONENT_ENABLED_STATE_DEFAULT . 因为我的广播接收器在清单中启用了状态,所以工作正常

        4
  •  0
  •   jiangyan.lily    13 年前

    我只得到了这个错误“java.lang.securityexception:permission denial:”当我试图从运行它的包中禁用某个组件时,我得到了成功。

    推荐文章