web-dev-qa-db-fra.com

Dois-je déclarer à la fois WRITE_EXTERNAL_STORAGE et READ_EXTERNAL_STORAGE?

Suffit-il de déclarer <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" /> ou dois-je également déclarer <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />? Les Javadocs omettent ces informations importantes.

34
Jeff Axelrod

READ_EXTERNAL_STORAGE n'existe qu'à partir de Jelly bean (Niveau 16). Selon les docs , toutes les applications à partir de Jelly bean ont cette autorisation, même sans la déclarer:

Fournit un accès protégé en lecture au stockage externe. Dans Android 4.1 par défaut, toutes les applications ont toujours un accès en lecture. Cela sera modifié dans une future version pour exiger que les applications demandent explicitement un accès en lecture à l'aide de cette autorisation. Si votre application demande déjà un accès en écriture, elle obtiendra automatiquement un accès en lecture également. Il existe une nouvelle option pour les développeurs pour activer la restriction d'accès en lecture, afin que les développeurs puissent tester leurs applications par rapport au comportement de Android à l'avenir.

Donc, vous devez le déclarer pour une compatibilité future, mais cela pourrait ne pas être la source de votre problème, sauf si vous utilisez un téléphone Jelly Bean et définissez l'option développeur "Protéger le stockage USB".

16
wsanville

Il vaut mieux être explicite et déclarer les deux autorisations, mais en déclarant uniquement Android.permission.WRITE_EXTERNAL_STORAGE ajoutera automatiquement Android.permission.READ_EXTERNAL_STORAGE à votre APK au moment de la création.

Vous pouvez utiliser la commande aapt dump badging sur un fichier APK pour voir que Android considère l'utilisation de l'autorisation d'écriture pour impliquer que vous souhaitez également une autorisation de lecture.

Voici une sortie d'aapt pour un de mes fichiers APK où j'ai déclaré seulementWRITE_EXTERNAL_STORAGE dans mon manifeste:

uses-permission:'Android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'Android.permission.READ_EXTERNAL_STORAGE'
uses-implied-permission:'Android.permission.READ_EXTERNAL_STORAGE',
  'requested WRITE_EXTERNAL_STORAGE'
18
Christopher Orr