D'après ce que je devine, le stockage interne est disponible pour chaque utilisateur. Si le stockage émulé est un emplacement de stockage, créé pour un utilisateur spécifique, est-ce que les fichiers créés dans le stockage interne sont disponibles pour chaque utilisateur ? /storage/emulated/0
censé apparaître dans /storage/sdcard0
? Je suppose que non, car les fichiers créés par l'utilisateur ne devraient apparaître que dans l'émulation, sinon les fichiers créés par l'utilisateur seraient accessibles à tous les autres utilisateurs.
Réponses
Trop de publicités?J'ai vérifié sur l'un de mes appareils, et comme la chaîne de commentaires le laissait déjà supposer, vous n'avez pas à vous inquiéter du fait que tout le monde ait accès aux données de tout le monde. Premièrement :
/storage/sdcard0 -> /storage/emulated/legacy
Ce qui signifie que c'est juste un lien symbolique qui pointe toujours vers les données de l'utilisateur actuel :
/storage/emulated/legacy -> /mnt/shell/emulated/0
(le premier utilisateur - dans mon cas, le seul). Deuxièmement, où vous le cherchez habituellement :
/sdcard -> /storage/emulated/legacy
Encore le même jeu. Donc pour la carte SD émulée (alias la "carte SD interne"), le système Android prend soin de la mapper en conséquence pour l'utilisateur actuel. Je ne suis pas sûr pour la carte SD externe (si elle peut être utilisée pour partager des données entre plusieurs utilisateurs). Cela se trouve généralement dans /storage/sdcard1
:
$ mount | grep sdcard
/dev/block/vold/179:65 /mnt/media_rw/sdcard1 vfat […]
/dev/fuse /storage/sdcard1 fuse […]
$ ls /mnt/media_rw/sdcard1
/mnt/media_rw/sdcard1: Permission denied
$ su -c "ls /mnt/media_rw/sdcard1"
[data from external SD card]
Donc vous pouvez voir que la carte SD externe est accessible uniquement directement avec des pouvoirs Root, pourquoi les "utilisateurs ordinaires" doivent passer par un montage FUSE superposé. Le système pourrait donc s'assurer que chaque utilisateur ne puisse accéder qu'à ses propres données à cet endroit. Je ne suis pas assez familier avec les internes pour en être sûr (ou même pour dire ce qui est exactement fait ici).
Maintenant, pour votre question explicite, si créés dans /storage/emulated/0
censé apparaître dans /storage/sdcard0
: En supposant que vous parlez de /mnt/shell/emulated/0
(Je n'ai pas pu trouver /storage/emulated/0
sur mon appareil), empiriquement c'est le cas, puisque les deux sont au même endroit : /storage/sdcard0 -> /storage/emulated/legacy -> /mnt/shell/emulated/0
- ce qui signifie que /storage/sdcard0
montre ce qui est contenu dans /mnt/shell/emulated/0
. Mais votre inquiétude n'est pas justifiée : en raison de l'"intermédiaire" ( /storage/emulated/legacy
), /storage/sdcard0
pointe toujours vers le stockage de l'"utilisateur connecté" - ainsi, si le deuxième utilisateur regarde ici, il verra ce qui se trouve dans /mnt/shell/emulated/1
(ou quelle que soit sa zone de stockage émulée).
En guise de PS, permettez-moi de résumer les choses à partir des commentaires, sous la forme d'une courte FAQ :
-
Je me demande ce qui se passerait si un autre utilisateur essayait d'accéder et de sauvegarder des données dans le stockage émulé d'un autre utilisateur ?
Il reçoit un message d'erreur indiquant qu'il n'existe pas ou qu'il n'est pas accessible. -
Pourquoi ces liens symboliques sont-ils nécessaires ?
De multiples raisons, dont beaucoup sont historiques (un seul mot : "compatibilité"). -
Que sont ces liens symboliques et comment fonctionnent-ils, en termes simples ?
Il s'agit essentiellement de "panneaux indicateurs", qui disent "regardez là". Contrairement à ce que vous pensiez au départ, ils ne contiennent pas eux-mêmes de données - ce ne sont que des panneaux indicateurs ou des "pointeurs". Les données elles-mêmes se trouvent à l'"emplacement ciblé", et uniquement à cet endroit. Pour plus de détails, veuillez consulter le Article de Wikipédia sur les liens symboliques .
Voir aussi :
- Accéder au système de fichiers
- Dissipons une fois pour toutes la confusion concernant le stockage dans Android, y compris le stockage adoptable dans Marshmallow.
-
Comment fonctionne la fonction multi-utilisateurs en termes de chemins sur Android ?
(contient une autre petite FAQ, pas seulement pour les développeurs) - La situation du stockage : Stockage amovible
- Stockage (documentation Android)
M. Jouets coûteux a dit : Je suis étonné que ce problème apparaisse encore car il a commencé à se produire dès Honeycomb.
Donc, le /storage/emulated/0/DCIM/Camera
est le même dossier que votre dossier normal DCIM/Camera. C'est juste un lien symbolique. Donc les fichiers sont en fait au bon endroit, vous avez juste une application qui a mis de mauvaises données dans la base de données MediaStore.
Lorsque vous accédez à des fichiers depuis votre PC, vous êtes en train d'énumérer les fichiers dans la base de données de MediaStorage. Il ne s'agit pas d'une liste de répertoire traditionnelle. Ce que vous voyez est donc basé sur ce qui se trouve dans cette base de données et sur les entrées de chemin d'accès de la base de données.
Les fichiers de la base de données pointant vers des répertoires émulés ne sont pas affichés car ils sont supposés être des doublons, étant donné qu'il s'agit du même répertoire physique que votre DCIM/Camera normale. Ce qui se passe, c'est que certaines applications tierces mal écrites insèrent des entrées dans la base de données avec l'attribut /storage/emulated/0/DCIM/Camera
au lieu du chemin d'accès racine vers DCIM/Camera. Ce qui signifie que le service MTP ne peut pas les voir lorsque vous êtes connecté à votre PC.
En général, le moyen le plus simple de résoudre le problème est d'effacer les bases de données MediaStore pour éliminer les mauvaises entrées de la base de données MediaStore et laisser le système réindexer les fichiers et les placer dans la base de données avec les bons chemins.
Rég Rég Rég Rég pour les applications Appuyez sur le menu à 3 points en haut à droite et sélectionnez Afficher le système. Trouvez le stockage multimédia, sélectionnez-le, sélectionnez le stockage, puis effacez les données. Trouvez le stockage externe, sélectionnez-le, sélectionnez le stockage, puis effacez les données. Éteignez le téléphone, rallumez-le, attendez que le service d'indexation reconstruise les données.
Lorsque vous avez terminé, les fichiers devraient apparaître dans une arborescence de répertoires appropriée et être visibles depuis le PC. Selon le nombre de fichiers présents sur le téléphone, la reconstruction de la base de données multimédia peut prendre entre 10 et 20 minutes, car le service parcourt les répertoires du téléphone, récupère les métadonnées, crée les vignettes, etc.