Les autorisations Android WRITE_EXTERNAL_STORAGE
et READ_EXTERNAL_STORAGE
vont-elles déclencher le nouveau accorder l'autorisation dialogue d'Android M?
Je suis d'accord avec la réponse de Guillaume Perrot. J'ai rencontré la même question lorsque j'écris la permission de READ_WRITE_EXTERNAL_STORAGE
dans AndroidManifest.xml
sans autorisation apparaissant dans l'application par défaut, les utilisateurs doivent basculer le bouton de stockage des autorisations dans l'application.Ensuite, je modifie ma targetSdkVersion
dans build.gradle
en un nombre inférieur à 23(MNC)
et à un autre numéro associé à sdkVersion
, l'application installée avec les autorisations correspondantes. .
L’autre méthode consiste à écrire la fonction requestpermission
à l’endroit où vous avez besoin de la permission. Le code est le suivant:
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED) {
//do the things} else {
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
AnyNumber);
Comme j'ai moins de 15 ans de réputation, je ne peux donc pas voter pour la réponse de Guillaume Perrot. Utilisez ce moyen pour montrer mon idée.
J'ai résolu d'ajouter ceci si vérifier la version pour Android M
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
requestPermissions(new String[]{Android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
Ma réponse est basée sur mes tests sur M Preview SDK version 2, en utilisant un émulateur.
Si vous ciblez MNC
niveau de l'API de prévisualisation, WRITE_EXTERNAL_STORAGE
n'est pas accordé par défaut et fera partie de la nouvelle API d'autorisations dynamiques.
L'autorisation de stockage s'affiche sous la forme d'un bouton bascule dans le nouveau menu d'autorisations d'application dans les paramètres du périphérique. Vous pouvez également utiliser Activity.requestPermissions
pour afficher la fenêtre contextuelle de cette autorisation.
Cependant, si vous ciblez un niveau d'api <MNC, il ne sera pas classé comme une autorisation dangereuse et sera donc accordé sans moyen pour l'utilisateur de la désactiver (ne figurant pas dans les paramètres d'autorisation) compilez le code en utilisant de toute façon Activity.requestPermissions
comme kit de prévisualisation pour appliquer le minSdkVersion="MNC"
à l'utilisation des nouvelles API.
Ce comportement diffère de celui des autorisations d'emplacement: quel que soit le niveau d'API que vous ciblez, l'utilisateur pourra désactiver l'emplacement dans le menu des autorisations.
Pour le menu des autorisations lui-même, l'état de basculement des autorisations est activé par défaut si:
Sinon, vous verrez la bascule sur OFF par défaut.
J'espère que ça aide.
Selon Documents Android vous n'avez pas besoin de demander l'autorisation de lire et d'écrire sur le stockage externe.
Modifier: dans la dernière version d'Android M, vous devez demander à la fois des autorisations de lecture et d'écriture.
L'autorisation de stockage tombe sous le niveau de protection dangereux. Par conséquent, toutes les autorisations de niveau de protection dangereuses ne seront pas accordées au moment de l'installation dans Android M, si le kit de développement logiciel (SDK) de l'application cible est défini sur 23. Ils seront attribués au moment de l'exécution. peut également être révoqué au moment de l'exécution.
Aucune boîte de dialogue d'autorisation ne sera déclenchée automatiquement, vous devez faire une demande en utilisant une API telle que la méthode requestPermissions () pour afficher cette boîte de dialogue native.
S'il vous plaît vérifier la liste des autorisations de niveau dangereux ici
Selon les docs:
Autorisations accordées au moment de l'installation: lorsque l'utilisateur installe ou met à jour l'application, le système accorde à l'application toutes les autorisations demandées par l'application sous PROTECTION_NORMAL.
Donc, parce que READ_EXTERNAL_STORAGE relève de PROTECTION_NORMAL, le dialogue ne sera pas déclenché.
Mais comme le niveau de WRITE_EXTERNAL_STORAGE est Protection_DANGEROUS, il tombera sous ce comportement comme décrit dans la documentation:
Autorisations accordées par l'utilisateur au moment de l'exécution: lorsque l'application demande une autorisation, le système affiche une boîte de dialogue à l'intention de l'utilisateur, puis appelle la fonction de rappel de l'application pour lui indiquer si l'autorisation a été accordée. Si un utilisateur accorde une autorisation, l'application reçoit toutes les autorisations déclarées dans le domaine fonctionnel de cette autorisation dans le manifeste de l'application.
Voici les sources pour le niveau de protection: