Frage

Ich bin nach dem Upgrade auf die neueste SDK zurückgekehrt und plötzlich fehlgeschlagen mein Widget beim Start mit dieser Nachricht:

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

Hier sind zwei Codezeilen, in denen eine Ausnahme eintritt:

@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);
}

Also im obigen Code startAlarm() wird seitdem nie ausgeführt pm.setComponentEnabledSetting() wirft die Sicherheitsexception aus

Fehlt mir Sicherheitseinstellungen in meinem Manifest? Derzeit habe ich:

<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" />

Ich entwickle mich für SDK v. 1.5 Und es funktioniert früher gut

Ps es passiert am Telefon und dem Emulator

War es hilfreich?

Lösung 3

OK - das ist nicht wirklich antwortet, sondern eine Problemumgehung. Wenn jemand einsteigen und Antwort oder Erklärungen geben möchte, wie dies getan werden soll, würde ich das gerne akzeptieren. Wie auch immer - ich habe es zum Laufen gebracht, indem ich mich veränderte newState Flagge von COMPONENT_ENABLED_STATE_ENABLED zu PackageManager.COMPONENT_ENABLED_STATE_DEFAULT. Da mein Broadcast -Empfänger den Staat im Manifest ermöglicht hat, funktioniert er gut

Andere Tipps

Im Manifest.xml werden Sie hinzufügen

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

Im Android.mk fügt hinzu

LOCAL_CERTIFICATE := platform  

das ist alles.

Können Sie versuchen, diese Berechtigung in Ihrem Manifest hinzuzufügen?

<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>

Ich habe nur diesen Fehler "java.lang.securityException: Berechtigung Ablehnung:" Wenn ich versuche, einige Komponenten aus dem Paket zu deaktivieren, in dem es ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top