Je sais qu'Android 6.0 a de nouvelles autorisations et je sais que je peux les appeler avec quelque chose comme ça
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_WRITE_STORAGE);
}
Aujourd'hui, j'ai vu une application Google qui nécessite 3 autorisations: contacts, sms et appareil photo. Il fait une page 1-3 et les appelle tous ensemble en même temps pour l'activer.
Quelqu'un peut-il me dire comment je peux appeler 4 autorisations pour activer en même temps comme sms, appareil photo, contacts et stockage?
Exemple (j'ai oublié le nom de l'application google :()
L'application a besoin de sms, de contacts et d'un appareil photo
l'application m'a demandé (et a fait une boîte de dialogue page1-3) activer les sms, activer les contacts puis l'appareil photo. Donc, cette application Google appelait les 3 autorisations requises ensemble et ma question est de savoir comment puis-je obtenir la même chose?
Réponses:
Incluez simplement les 4 autorisations dans l'
ActivityCompat.requestPermissions(...)
appel et Android les mettra automatiquement en page comme vous l'avez mentionné.J'ai une méthode d'aide pour vérifier plusieurs autorisations et voir si l'une d'entre elles n'est pas accordée.
Ou à Kotlin:
Ensuite, envoyez-lui toutes les autorisations. Android ne demandera que ceux dont il a besoin.
la source
Voici un exemple détaillé avec plusieurs demandes d'autorisation: -
L'application nécessite 2 autorisations au démarrage. SEND_SMS et ACCESS_FINE_LOCATION (les deux sont mentionnés dans manifest.xml).
J'utilise Support Library v4 qui est prêt à gérer Android pré-Marshmallow et donc pas besoin de vérifier les versions de build.
Dès que l'application démarre, elle demande plusieurs autorisations ensemble. Si les deux autorisations sont accordées, le flux normal se poursuit.
ContextCompat.checkSelfPermission (), ActivityCompat.requestPermissions (), ActivityCompat.shouldShowRequestPermissionRationale () font partie de la bibliothèque de support.
Dans le cas où une ou plusieurs autorisations ne sont pas accordées, ActivityCompat.requestPermissions () demandera des autorisations et le contrôle passera à la méthode de rappel onRequestPermissionsResult ().
Vous devriez vérifier la valeur de l'indicateur shouldShowRequestPermissionRationale () dans la méthode de rappel onRequestPermissionsResult ().
Il n'y a que deux cas: -
Cas 1: -À chaque fois que l'utilisateur clique sur Refuser les autorisations (y compris la toute première fois), il retournera vrai. Ainsi, lorsque l'utilisateur refuse, nous pouvons montrer plus d'explications et continuer à demander à nouveau
Cas 2: -Seulement si l'utilisateur sélectionne «ne plus jamais demander», il retournera faux. Dans ce cas, nous pouvons continuer avec des fonctionnalités limitées et guider l'utilisateur pour activer les autorisations à partir des paramètres pour plus de fonctionnalités, ou nous pouvons terminer la configuration, si les autorisations sont triviales pour l'application.
CAS 1
CAS-2
la source
Petit code:
Liste des autorisations Android, autorisations normales et autorisations dangereuses dans l'API 23
la source
}
la source
C'est facile, fais comme ça
Dans votre onCreate
Puis vérifiez le résultat
la source
Mon approche est basée sur la réponse de Nicks et, espérons-le, est un peu plus utilisable pour plusieurs autorisations (autant que nécessaire, pas seulement deux). Il suggère d'ajouter la classe PermissionsHelper à responsabilité unique:
}
Si une ou plusieurs autorisations requises n'ont pas été accordées par l'utilisateur, le message détaillé AlertDialog lui sera affiché.
Exemple d'utilisation dans l'activité:
J'espère que cela sera utile pour quelqu'un.
la source
Ma classe de gestionnaire pour demander plusieurs autorisations. Vous pouvez vérifier le plein en utilisant ici
la source
La méthodologie suivante concerne
Créer une classe "statique" pour les méthodes d'autorisations
Dans MainActivity.java
la source
Reportez-vous à ce lien pour une compréhension complète des autorisations multiples, ainsi que du téléchargement complet du code source, cliquez ici
la source
Vérifier chaque situation
si refusé - affichage de la boîte de dialogue d'alerte à l'utilisateur pourquoi nous avons besoin d'une autorisation
Vérification des résultats des autorisations
la source
Il n'y a rien de mal à ce que les réponses demandent plusieurs autorisations, mais le code de résultat d'autorisation multiple n'est pas implémenté de manière très élégante et peut entraîner la vérification d'un résultat d'autorisation erroné.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
est une logique terrible pour vérifier le résultat de plusieurs autorisations, je ne sais pas pourquoi Google a mis en œuvre un code aussi terrible.C'est un gâchis surtout lorsque vous vérifiez plusieurs autorisations. Disons que vous demandez
CAMERA
,ACCESS_FINE_LOCATION
etACCESS_NETWORK_STATE
.Vous devez vérifier,
ACCESS_FINE_LOCATION
mais l'utilisateur n'est accordé queCAMERA
lors de la première exécution et vous vérifiez,grantResults[1]
mais dans la deuxième exécutionACCESS_FINE_LOCATION
devient l'autorisation avec l'index 0. J'ai tellement de problèmes avec l'utilisateur n'accordant pas toutes les autorisations à la fois et je dois écrire une logique de résultat d'autorisation si inutile.Vous devez soit utiliser
Ou plus simple
dans la
onPermissionRequestResult
méthode.la source
Après avoir vu toutes les réponses longues et complexes. Je veux poster cette réponse.
RxPermission est maintenant une bibliothèque largement utilisée pour demander l'autorisation dans un code en une ligne.
ajoutez votre
build.gradle
N'est-ce pas facile?
la source
J'ai implémenté avec succès un code simple pour l'autorisation multiple à la fois. Suivez les étapes 1 ci-dessous: Créez la classe Utility.java comme ci-dessous
2: Appelez maintenant
dans votre activité onCreate () ou selon votre logique.
3: Vérifiez maintenant l'autorisation avant d'effectuer une opération pour une tâche particulière
4: Maintenant, implémentez la méthode onRequestPermissionsResult () dans votre activité comme ci-dessous
la source
Court et doux :). ce en quoi je crois.
la source
la source
Vous pouvez utiliser Dexter
En
build.gradle
plus:Et utilisez-le dans votre activité comme:
la source
J'ai trouvé que c'était dans l'exemple des autorisations d'exécution du github de Google.
la source
Consultez la section «Demander plusieurs autorisations à la fois» de cet article:
Ce que vous devez savoir sur les autorisations Android M
C'est très bien expliqué et peut également toucher d'autres sujets connexes auxquels vous n'avez pas pensé.
la source
Utilisez un helper comme celui-ci (les noms d'autorisations n'ont pas d'importance).
}
la source
Un moyen simple de demander plusieurs autorisations,
https://github.com/sachinvarma/EasyPermission
Comment ajouter :
Comment demander la permission:
Pour plus de détails ->
https://github.com/sachinvarma/EasyPermission/blob/master/app/src/main/java/com/sachinvarma/easypermissionsample/MainActivity.java
Cela peut aider quelqu'un à l'avenir.
la source
À Kotlin:
la source
C'est ce que j'ai fait dans mon activité. Espérer sera utile. Je demande les autorisations de caméra et de microphone.
la source