Я вернулся к разработке виджета после обновления до последней версии 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
, и он работал нормально
P.S. Бывает на телефоне и эмуляторе