Comment L'accès au stockage change-t-il sur Android 6?
arrière-plan
Android a eu beaucoup de changements quant à la façon de gérer la carte SD-et le stockage en général:
- API 3 - vous obtenez tout l'accès, aucune permission nécessaire
- API 4-15 - vous devez utiliser WRITE_EXTERNAL_STORAGE, et vous obtenez tous les accès.
- API 16-18 - si vous souhaitez seulement lire, utilisez READ_EXTERNAL_STORAGE
- API 19-20 - vous ne pouvez pas lire ou écrire au secondaire stockage externe (SD-card), sauf si votre application est une application système, ou si vous avez root.
- API 21-22-pour accéder à la carte SD, vous devez demander la permission à l'utilisateur et utiliser L'API DocumentFile au lieu de L'API File. Cela a soulevé beaucoup de questions, comme j'ai écrit à propos de ici , ici et ici .
à partir de API 23 (Android 6), les choses semblent changer encore une fois...
le problème
pour API 23, Il y a au moins 2 choses qui sont nouvelles et sont liées au stockage:
- " dispositifs de stockage adoptables " - l'utilisateur peut éventuellement faire la carte SD comme quelque chose qui est comme le stockage externe primaire.
- en tant que partie du nouveau mécanisme de permissions (demande de permissions à l'exécution), il semble que le stockage soit aussi une permission que l'utilisateur doit confirmer. C'est pour READ_EXTERNAL_STORAGE et WRITE_EXTERNAL_STORAGE
étant donné qu'il n'y a pas D'appareil Android 6 qui possède une carte SD, et que l'émulateur lui-même n'a pas vraiment la capacité d'utiliser une carte SD, il est toujours impossible de savoir ce qui se passe.
les questions
-
la carte SD obtiendra-t-elle l'accès en utilisant L'API File au lieu de DocumentFile?
-
si je veux accéder à tous les chemins de stockage externes (y compris la carte SD), est-ce que cela signifie que je dois demander ces permissions deux fois: une pour le stockage externe primaire et une pour la carte SD?
-
sont des fichiers sur la carte SD accessibles d'une façon ou d'une autre avant que le manuel n'accorde la permission?
-
supposons que l'Utilisateur a choisi d'utiliser des "dispositifs de stockage adoptables", qu'est-ce que cela signifie pour les diverses fonctions qui récupèrent les chemins des fichiers de l'application? Par exemple: getFilesDir, getExternalFilesDir,... ? L'oder de getExternalFilesDirs changerait-il à cause de cela?
-
Ce qui se passe pour les fichiers de l'application lorsque l'utilisateur déplace l'application de/vers la carte SD (en utilisant les "dispositifs de stockage adoptables") ? Qu'en est-il des fichiers de l'application sur la carte SD? Pourraient-ils rester? Ou vont-ils déménager quelque part?
Par exemple, si l'application a "fichier1.txt" sur la carte SD, sur le chemin "/storage/extSdCard/Android/data/appPackageName", et il a un fichier "fichier2.txt "(ou même le même nom) sur le stockage externe primaire sur le chemin"/storage/emulated/0/Android/data/appPackageName". Après l'échange, que se passerait-il pour ces fichiers? Comment seraient-ils les fusionner en un seul dossier, le cas échéant?
-
lors du déplacement de l'application vers la carte SD (en utilisant des "dispositifs de stockage adoptables"), cela signifie-t-il qu'aucun stockage interne ne sera utilisé?
2 réponses
Permettez-moi de répondre Adoptables des Périphériques de Stockage questions connexes:
- supposons que l'Utilisateur a choisi d'utiliser des "dispositifs de stockage adoptables", qu'est-ce que cela signifie pour les diverses fonctions qui récupèrent les chemins de les fichiers de l'application? Par exemple: getFilesDir, getExternalFilesDir,... ? L'oder de getExternalFilesDirs changerait-il à cause de cela?
Lorsque l'utilisateur choisit pour utiliser la carte SD comme "périphérique de stockage Adoptable" (Format interne), cela signifie Maintenant que la carte SD est disponible uniquement comme stockage interne, c'est-à-dire pas de carte SD disponible pour stocker les fichiers téléchargés. Il n'y aura aucun changement d'ordre dans les chemins retournés par les méthodes associées. Par exemple: getExternalFilesDir() ne listera que le chemin de stockage externe si l'Utilisateur a formaté sa carte SD en "dispositifs de stockage adoptables". Carte SD chemin ne sera pas disponible.
- Ce qui se passe à les fichiers de l'application lorsque l'utilisateur déplace l'application de/vers la carte SD (en utilisant les "dispositifs de stockage adoptables") ? Quel à propos des fichiers de l'application sur la carte SD? Pourraient-ils rester? Ou seraient-ils aller quelque part? Par exemple, si l'application a "fichier1.txt" sur le Carte SD, sur le chemin "/storage/extSdCard/Android/data/appPackageName", et il a un fichier "fichier2.txt" (ou le même nom) sur le primaire stockage externe sur le chemin "/storage/emulated/0/Android/data / appPackageName". Après la commutation, quel ça arriverait pour ces dossiers? Comment pourraient-ils fusionner en un seul dossier, si?
quand jamais l'utilisateur choisira sa carte SD comme "dispositifs de stockage adoptables" alors l'utilisateur doit formater sa carte SD comme stockage interne en utilisant "Format comme interne" option. Format signifie que toutes les données/fichiers stockés sur la carte SD seront effacées. De même, lorsque l'utilisateur veut retirer sa carte SD de "dispositifs de stockage adoptables", alors l'Utilisateur a de nouveau pour formater sa carte SD en stockage portable en utilisant l'option " Format portable .
- lors du déplacement de l'application vers la carte SD (en utilisant des "dispositifs de stockage adoptables"), cela signifie-t-il qu'aucun stockage interne ne sera utilisé?
Oui, l'entreposage interne d'origine ne sera pas utilisé. Seul le stockage de carte SD sera utilisé car après avoir choisi la carte SD comme"dispositifs de stockage adoptables". Tous les les données / cache seront stockées sur la carte SD
pour répondre à votre question 5: sous Android 7, tous les fichiers dans la zone" données publiques", /storage/emulated/0/
(ou un emplacement spécifique du fabricant; c'est le répertoire contenant DCIM
Downloads
, etc.), sont stockés soit entièrement dans la mémoire interne, soit entièrement sur la carte SD adoptée. Après le format initial d'une carte SD adoptée, l'utilisateur aura la possibilité de "migrer les données", ce qui déplacera tout le /storage/emulated/0
vers la carte SD. À tout moment, l'utilisateur peut aussi aller à Paramètres / Stockage , choisissez la zone de stockage qui ne détient pas actuellement la zone de données publique, et le et en cliquant sur l'icône ⋮
(trois points verticaux) en haut à droite pour faire apparaître un menu avec l'option "migrer les données".
il semble qu'il n'y ait aucun moyen pour un utilisateur ou une application de forcer un fichier public particulier à la carte SD si une carte adoptée est utilisée; c'est tout ou rien. (Le stockage privé de l'application sera dans le de stockage ou sur la carte SD basée sur si oui ou non l'application a été déplacé vers la carte SD; là encore, il apparaît que l'application ne jamais utiliser l'un ou l'autre, pas les deux.)