Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top