2015-12-26 1 views
6

Dans mon application Android, je sauvegarde des fichiers dans le répertoire Environment.getExternalStorageDirectory() + "\MyApp". Cela a bien fonctionné jusqu'à la mise à jour de guimauve android 6. Après la mise à jour de marshmallow, je ne peux pas écrire dans ce répertoire.Ai-je besoin d'une vérification d'autorisation d'exécution pour écrire dans le chemin getExternalFilesDir() dans marshmallow?

Comme décrit dans la réponse this, dans marshmallow, les applications doivent demander l'autorisation de l'utilisateur lors de l'exécution avant d'écrire sur le stockage externe.

Mais, quand je l'utilise context.getExternalFilesDir(null) au lieu de Environment.getExternalStorageDirectory(), je ne ai pas besoin de demander aucune autorisation à l'exécution et il fonctionne (chemin de retour de context.getExternalFilesDir(null) est également dans le répertoire de stockage externe).

Est-ce une sorte de coïncidence ou puis-je continuer à écrire à context.getExternalFilesDir(null) sans demander l'autorisation à l'exécution?

+0

Êtes-vous vraiment en mesure d'écrire des fichiers de stockage externes sans demander l'autorisation sur Android 6? –

Répondre

8

Les documentation états:

À partir de KITKAT, aucune autorisation ne doivent lire ou écrire le chemin de retour; il est toujours accessible à l'application qui appelle. Ce ne s'applique qu'aux chemins générés pour le nom de package de l'application d'appel. Pour accéder aux chemins appartenant à d'autres packages, les champs WRITE_EXTERNAL_STORAGE et/ou READ_EXTERNAL_STORAGE sont requis.

Vous aurez un accès en lecture/écriture à getExternalFilesDir() sur Android 4.4+ sans aucune autorisation.

Je recommanderais d'utiliser un FileProvider si vous avez besoin de prendre en charge des niveaux API inférieurs.

+0

Si je cible l'API 25, mais que je prends en charge l'API 16, dois-je toujours déclarer l'autorisation 'WRITE_EXTERNAL_STORAGE' dans le manifeste et ne pas demander l'autorisation à l'exécution? – ankushg

0

Comme je sais AUTORISATIONS sont présentés a commencé depuis Android 6 et plus Donc pas besoin de vérifier les autorisations pour l'API 16