web-dev-qa-db-fra.com

Accorder l'autorisation requise pour EXTERNAL_STORAGE dans Android M?

Les autorisations Android WRITE_EXTERNAL_STORAGE et READ_EXTERNAL_STORAGE vont-elles déclencher le nouveau accorder l'autorisation dialogue d'Android M?

7
Matt

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.

9
Elf Xu

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);
            }
6
Samuel Ivan

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:

  • Niveau de l'API cible <MNC.
  • Niveau d'API cible = MNC mais vous mettez à niveau l'application sur le périphérique à partir d'une installation précédente où le niveau d'API cible était inférieur à MNC.

Sinon, vous verrez la bascule sur OFF par défaut.

J'espère que ça aide.

2
Guillaume Perrot

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.

0
greywolf82

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

0
dex

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:

liste détaillée

0
yshahak