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
. Анкет Поскольку мой вещательный приемник включил состояние в манифесте, он работает просто отлично
Другие советы
В manifest.xml вы добавите
<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: разрешение отрицания:" Когда я пытаюсь отключить какой -то компонент из пакета, он работает в. В противном случае я добился успеха.