Darf nicht starten, service Absicht ohne Erlaubnis - sender nicht bekommen Berechtigungen
Arbeite ich mit Mark Murphy ' s ausgezeichnete Commonsware Bücher - aber es ist eine Menge zu verdauen. Ich baute die "FakePlayer" - app (gibt vor, ein mp3-player). Es enthält einen service. Als Lern-Erfahrung, die ich zu schreiben versucht, eine triviale app (nur eine Taste), dessen Klick-Prozedur:
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
Es geklappt hat - den Dienst starten, ok. Ich bemerkte, Eclipse beschwert sich über keine Berechtigung für den Dienst, so dass ich aktualisiert die service-manifest durch hinzufügen von 2 Zeilen, android:Berechtigungen und android:exportiert:
<service
android:name="MyPlayerService"
android:permission="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION"
android:exported="true"
<intent-filter>
<action android:name="com.example.fakeplayer.MyPlayerService"></action>
</intent-filter>
</service>
Ich reloaded-player-app auf das Gerät (ich verwende ein Galaxy S2) mit 'debug' unter eclipse. Es schien zu funktionieren; die starter-app verursacht eine Erlaubnis, Ausnahme, was ich erwartet hatte.
Habe ich dann Hinzugefügt, um die starter-app-manifest (um ihm die Erlaubnis):
<manifest
...
<uses-sdk ....
....
<uses-permission android:name="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION" />
Ich reloaded starter-app auf dem Gerät (mit Debuggen unter Eclipse). Noch Holen Sie sich die Erlaubnis Fehler im starter-app.
Entfernte ich beide apps vom Gerät und neu installiert (mit debug...), service app zuerst, dann der starter. Bekomme immer noch perm Fehler.
Arbeite ich meinen Weg durch die 'wie mit einem remote-service' - Abschnitt des Mr. Murphy ' s Advanced Android-Buch, so dass ich erkannte, dass dies nicht der beste Weg ist vielleicht, die Arbeit über apps.
Habe ich ein "adb shell dumpsys-Paket", befindet sich die starter-app, und gefunden hatte es 'permissionsFixed=false' und nicht 'grantedPermissions' Abschnitt. Ich nehme das bedeuten, das manifest zu ändern in der starter-app ist nicht gelungen, in der Region perm Hinzugefügt, um die app. Aber ich habe keine Ahnung, warum. Als eine Lernerfahrung, es erzeugt nur Verwirrung so weit....
Alle Hinweise sehr dankbar! Danke!
InformationsquelleAutor Art Swri | 2013-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Technisch
android:exported="true"
überflüssig ist, wie die<intent-filter>
automatisch die<service>
exportiert werden.Sie zeigen nicht, wo Sie jemals erklären die benutzerdefinierte Berechtigung mit der
<permission>
element. In der Praxis, wenn Sie die Kontrolle über beide apps, setzen das gleiche<permission>
element in beiden manifestiert sich, so die Reihenfolge bei der installation der beiden apps keine Rolle mehr.Gut, das Buch, das Sie offenbar Lesen ("Advanced Android") war im Ruhestand vor einem Jahr, mit dessen Inhalt Sie gefaltet in meine Haupt-Buch. Dieses Buch definitiv deckt die
<permission>
element für benutzerdefinierte Berechtigungen, wie ich Sie in einem plugin-Beispiel: github.com/commonsguy/cw-omnibus/tree/master/RemoteViews, Die being said, vielen Dank für die freundlichen Worte!Wow ich bin weiter hinter, als ich dachte - mein Abo lief ab. Jetzt verlassen zu erneuern...
Zu der zweiten Hälfte deine Antwort - ist es nicht das, was er mit den android:permission=... innerhalb der <service> tag?
Die
android:permission
Attribut nicht deklariert eine benutzerdefinierte Berechtigung.<permission>
tut.android:permission
besagt, dass eine Komponente, die verteidigt werden sollten, von einer Berechtigung (benutzerdefinierte oder anderweitig), aber wenn diese Berechtigung nicht vorhanden, wird es nicht verwendet werden.InformationsquelleAutor CommonsWare
Versuchen Sie ersetzen diese in Ihrem manifest
statt
Sollte dies nicht funktionieren, bitte posten Sie aus Ihren Fehler.
InformationsquelleAutor IssacZH.