2 votes

Comment enregistrer des fichiers sur une carte SD externe sur un Android non rooté ?

J'utilise l'application Émulateur de terminal sur un téléphone Android 5.0.2 non enraciné.

En déplacer des fichiers d'un dossier de la carte SD externe à un autre avec :

mv /storage/extSdCard/DCIM/Camera/* /storage/extSdCard/phone/

J'ai compris :

mv: rename /storage/extSdCard/DCIM/Camera/20170519_161315.jpg to 
     /storage/extSdCard/phone/20170519_161315.jpg: Permission denied

Existe-t-il une solution pour cela (sans rooter le téléphone) ?


Note : ls -la en /storage/extSdCard donne :

drwxrwx--x root     sdcard_r          2016-08-10 02:18 Android
drwxrwx--- root     sdcard_r          2016-11-20 09:45 DCIM
...
drwxrwx--- root     sdcard_r          2017-05-19 15:46 phone

4voto

Irfan Latif Points 16863

L'accès en écriture au niveau du système de fichiers sur une carte SD physiquement externe sans rooter le téléphone est pas possible depuis les jours pré-KK. Cependant, les applications peuvent toujours (avec ou sans l'autorisation du stockage) lire et écrire dans leur espace de stockage. répertoires privés sur des stockages partagés. Vous pouvez donc déplacer des fichiers vers /storage/extSdCard/Android/data/ .


Sous Android 6+, la carte SD externe est visible à l'emplacement suivant /storage/[UUID] où l'UUID est celui du système de fichiers. Ce chemin du système de fichiers n'est disponible qu'en lecture (pour les applications avec READ|WRITE_EXTERNAL_STORAGE permission accordée) et de traversée (pour toutes les applications). Le dernier cas est de laisser les applications lire/écrire dans leurs répertoires privés. Comme dans le cas d'un système de fichiers interne émulé, le contrôle des permissions est implémenté par le biais de l'espace de nom mount et de l'option everybody (9997) GID. La carte SD est montée avec trois VIEWS de différentes permissions :

enter image description here

vold crée un espace de nom de montage isolé pour chaque application et selon l'état de l'autorisation de stockage de l'application, bind-mounts a VIEW a /storage/[UUID] . Pour plus de détails, voir Qu'est-ce que /storage/emulated/0/ ? y Qu'est-ce que l'UID "u#_everybody" ?


Puisqu'aucun des trois VIEWS a autorisation d'écriture Les applications ne disposent pas d'un accès en écriture au niveau du système de fichiers aux répertoires publics des cartes SD externes. Cependant, les applications - comme la plupart des explorateurs de fichiers - qui utilisent le Storage Access Framework ( SAF ) (ou Accès aux répertoires à portée étendue sur Android 7+ ou Accès au stockage externe sur Android 10+) sont capables de créer et de supprimer des fichiers sur toute la carte SD.


USB OTG est traité de manière presque similaire, mais avec une particularité importante. différence :

"MOUNT_FLAG_VISIBLE signifie que le volume est visible pour les applications tierces pour un accès direct au système de fichiers.
...
les volumes transitoires comme les dispositifs USB OTG ne devrait pas doivent être marqués comme visibles ; leur contenu doit être présenté aux applications par le biais du cadre d'accès au stockage."

Donc les USB ne sont pas exposés comme VIEWS Au lieu de cela, les applications voient /storage/[UUID] (qui n'est pas un chemin réel) du système de fichiers à travers SAF pour la lecture et l'écriture. C'est pourquoi le contenu des supports amovibles n'est pas disponible par l'intermédiaire de MediaStore aussi. Ni disponible pour les applications par le biais de APIs :

"Les chemins retournés n'incluent pas les dispositifs transitoires, tels que les clés USB connectées à des appareils portables."

Plusieurs dispositifs de stockage externes :

"Les dispositifs de stockage externe mis en surface par le biais de ces API doivent être une partie semi-permanente de l'appareil (comme un emplacement pour carte SD dans un compartiment à piles). Les développeurs s'attendent à ce que les données stockées à ces endroits soient disponibles pendant de longues périodes. Pour cette raison, les périphériques de stockage transitoires (tels que les lecteurs de stockage de masse USB) ne doivent pas être mis en surface par le biais de ces API."

Cependant Le stockage adoptif est toujours visible pour les applications que ce soit une carte SD ou une clé USB.


RELATED :

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X