【发布时间】:2010-01-12 21:37:42
【问题描述】:
升级到最新的 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 开发,它曾经工作正常
附:它发生在手机和模拟器上
【问题讨论】:
-
这种行为是否仅限于模拟器的特定操作系统版本?
-
我没有运行模拟器 - 这是直接在手机上运行的。最新的 SDK、Eclipse 插件、Windows XP 上的 Java 6
标签: android broadcastreceiver securityexception