Dans Android Marshmallow, les autorisations doivent être demandées au moment de l'exécution lorsqu'elles sont nécessaires, au lieu de toutes en même temps lorsqu'une application est installée. Cependant, je ne peux que sembler demander des autorisations à une activité, ce qui pose un problème car mon application ne contient que des services. (Pourquoi, demandez-vous? L'application contient un cadran de montre Android Wear intégré, et le téléphone ne fait que rechercher des photos à proximité pour les envoyer à la montre. Aucune activité n'est nécessaire. Mais il nécessite des autorisations de localisation.)
Alors, existe-t-il un moyen de demander des autorisations à un service? Ou forcer en quelque sorte les autorisations à être accordées au moment de l'installation comme par le passé?
la source
Réponses:
requestPermission()
ne peut être appelé qu'à partir d'unActivity
et non d'unService
(contrairement à cecheckPermission()
qui ne nécessite quePackageManager
). Vous devez donc faire un travail supplémentaire pour contourner cela; vous devez fournir unActivity
dans votre application et, par exemple, vousService
pouvez vérifier les autorisations dont il a besoin et si elles n'ont pas encore été accordées, il peut créer une notification et qui peut informer l'utilisateur avec un court message descriptif des raisons pour lesquelles il y a une notification et ce qui doit se passer lorsqu'ils cliquent sur la notification, etc.la source
Context
qui implémente égalementOnRequestPermissionsResultCallback
. La fonctionnalité est similaire à la normerequestPermission()
.Je suis d'accord, c'est très gênant pour les services, je pense que vous devriez signaler un problème sur la page d'Android Developer Preview pour cela.
Pour le moment, je pense que la meilleure solution est de vérifier l'autorisation sur le service et d'afficher une notification si l'autorisation est manquante. Mieux encore, créez un DialogActivity pour demander l'autorisation lorsque les utilisateurs appuient sur la notification.
la source
Jetez un œil à la bibliothèque PermissionEverywhere . Il vous permet de demander l'autorisation de n'importe quel contexte.
Il crée une notification en cliquant sur laquelle il ouvre une activité demandant une autorisation.
Exemple de code de la page github de la bibliothèque: -
la source
PermissionEverywhere
, assurez-vous que vous déclarez l'activité d'assistance dans votre manifeste ET assurez-vous que lorsque vous la déclarez, elle est liée au package correct (si vous utilisezPermissionEverywhere
comme package séparé). Il m'a fallu beaucoup de temps pour réaliser que je ne spécifiais pas réellement lePermissionEverywhere
package dans le manifeste.PermissionEverywhere
l'application de démonstration et cela n'a pas fonctionné.Il existe une bibliothèque très simple qui permet de faire exactement cela. Vous pouvez vérifier les autorisations de n'importe où (même à partir d'un service), selon que l'application est au premier plan ou en arrière-plan, elle affiche une boîte de dialogue normale ou génère une notification demandant des autorisations. Le code est vraiment facile à comprendre et il est également très facile à utiliser.
Essayez-le: autorisations Android
la source
Vous pouvez utiliser
ResultReceiver
pour créer un récepteur de la réponse des utilisateurs, puis le transmettre comme rappel à l'activité, via les notificationsPendingIntent
. Référencela source