Pas autorisé à démarrer le service de l'Intention, sans l'autorisation de l'expéditeur ne pas obtenir les autorisations
Je travaille avec Mark Murphy est un excellent Commonsware livres - mais il a beaucoup de choses à digérer. J'ai construit le "FakePlayer' app (fait semblant d'être un lecteur mp3). Il contient un service. Comme une expérience d'apprentissage j'ai essayé d'écrire une simple application (n'a qu'un bouton) dont cliquez sur gestionnaire:
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
Il a bien fonctionné - le démarrage du service ok. J'ai remarqué que l'Éclipse se plaindre d'aucune autorisation sur le service, donc j'ai mis à jour le service de l'manifeste par l'ajout de 2 lignes, android:autorisations et android:exportées:
<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>
J'ai rechargé le joueur de l'application sur le périphérique (je suis sur un Galaxy S2) à l'aide de 'debug' sous eclipse. Il semblait fonctionner; le starter app provoqué une autorisation d'exception, à laquelle je m'attendais.
J'ai ensuite ajouté le démarreur manifeste de l'application (pour lui donner la permission):
<manifest
...
<uses-sdk ....
....
<uses-permission android:name="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION" />
J'ai rechargé le démarreur application sur l'appareil (à l'aide de debug sous Eclipse). Toujours obtenir l'autorisation d'erreur dans le starter app.
J'ai enlevé les deux applications de l'appareil et de le réinstaller (à l'aide de debug...), l'application du service d'abord, puis de démarreur. Toujours obtenir perm erreur.
Je suis en train de travailler mon chemin à travers le "comment utiliser un service distant' article de M. Murphy Avancée Android livre, donc j'ai réalisé que ce n'est pas la meilleure façon peut-être de travailler avec l'ensemble des applications.
J'ai fait un "adb shell dumpsys ensemble", situé le starter app, et a constaté qu'elle avait 'permissionsFixed=false' et non 'grantedPermissions". Je prends ce à dire que le manifeste de changement dans le starter application n'a pas réussi à avoir de la région de perm ajoutés à l'application. Mais je n'ai aucune idée pourquoi. Comme une expérience d'apprentissage, il est généré seulement la confusion jusqu'à présent....
Des indices très apprécié! Merci!
OriginalL'auteur Art Swri | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
Techniquement,
android:exported="true"
est superflu, puisque la<intent-filter>
automatiquement le<service>
être exportés.Vous ne vous présentez pas où vous jamais déclarer l'autorisation personnalisé avec le
<permission>
élément. Dans la pratique, si vous contrôlez à la fois des applications, mettre le même<permission>
élément à la fois manifeste, de sorte que la commande de l'installation de votre deux applications n'a plus d'importance.Eh bien, le livre vous sont apparemment à la lecture ("Advanced Android") a été retiré il y a un an, avec son contenu, plié en mon livre principal. Ce livre couvre certainement le
<permission>
élément d'autorisations personnalisées, comme je l'ai utiliser dans un plugin exemple: github.com/commonsguy/cw-omnibus/tree/master/RemoteViews cela dit, merci pour les paroles!Wow, je suis de plus en plus de retard que je pensais que mon abonnement est arrivé à expiration. Laissant de le renouveler...
Pour la deuxième partie de votre réponse, ce n'est pas ce qu'il a fait avec android:permission=... à l'intérieur de la <> tag?
Le
android:permission
attribut de ne pas déclarer une autorisation personnalisée.<permission>
.android:permission
indique qu'un composant doit être défendu par une autorisation (personnalisé ou non), mais si cette autorisation n'existe pas, il ne sera pas utilisé.OriginalL'auteur CommonsWare
Essayer de remplacer ce dans votre manifeste
au lieu de
Si cela ne fonctionne pas, merci de poster votre erreur.
OriginalL'auteur IssacZH.