Comment puis-je permettre aux utilisateurs d'accéder au répertoire de stockage interne de mon application?
Mon application stocke les fichiers dans son répertoire de stockage interne (/Android/data/com.mycompany.myapp/fichiers, tel que retourné par la getFilesDir()), et je voudrais autoriser les utilisateurs à accéder à ces fichiers directement à partir d'un fichier de gestion de l'application sur leur appareil mobile ou le Transfert de Fichiers Android desktop application.
La Les Options de stockage guide du développeur dit:
Par défaut, les fichiers enregistrés sur la mémoire de stockage interne sont privés de votre application et d'autres applications ne peuvent pas accéder (ni l'utilisateur).
"Par défaut" implique que je peux modifier les autorisations par défaut pour autoriser les utilisateurs à accéder à ces fichiers, mais je ne trouve pas de documentation de la façon de le faire. Actuellement, le com.mycompany.répertoire myapp est caché quand je navigue dans le /Android/répertoire de données avec un fichier de gestion de l'application.
Je suis en train de fichier de sauvegarde de données comme ceci:
String fileName = "myfile.jpg";
String filePath = getFilesDir() + File.separator + fileName;
FileOutputStream fileStream = new FileOutputStream(filePath);
fileData.writeTo(fileStream); //fileData is a ByteArrayOutputStream
fileStream.close();
J'ai essayé en fixant les permissions des fichiers individuels pour lisible par tout le monde, mais n'en est pas de rendre le répertoire visible:
FileOutputStream fileStream = this.app.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
J'ai aussi vérifié la documentation pour le fichier AndroidManifest et ne rien voir du tout. Quelqu'un sait-il comment je peux faire cela?
source d'informationauteur arlomedia
Vous devez vous connecter pour publier un commentaire.
J'ai pris un peu plus près le résultat de
getFilesDir()
vsgetExternalFilesDir()
et a constaté quegetFilesDir()
retourne/data/data/[packagename]/files
toutgetExternalFilesDir()
retourne/Android/data/[packagename]/files
. Je pensais que les fichiers d'application, j'ai été la navigation en/Android/data
étaient les répertoires de stockage interne, mais maintenant je vois qu'en fait, ce sont les répertoires de stockage externe.Si l'espace de stockage interne répertoires sont en effet jamais disponible pour les utilisateurs réguliers, je souhaite la documentation dit que au lieu de dire qu'ils ne sont pas disponibles par défaut." Pour moi, au moins, en disant: "par défaut" implique que le comportement par défaut peut être changé.
De toute façon, j'ai testé et confirmé que si je supprime mon application, les fichiers enregistrés sur le
getExternalFilesDir()
sont supprimés automatiquement. Donc, qui répond à mon besoin pour un endroit de stockage qui est clairement liée à l'application (utilisation d'une application spécifique à nom de répertoire et supprimé avec l'app) mais est accessible aux utilisateurs occasionnels manuel de gestion de fichiers.Voici une comparaison qui pourrait être utile à quelqu'un d'autre lecture de ceci:
Je pense que vous êtes confus par les développeurs de la documentation, je ne peux pas vous blâmer, il n'est pas le meilleur de la documentation que j'ai jamais lu. De toute façon, Android fournit deux manières d'enregistrer les fichiers sur le système de fichiers:
La de Stockage Interne est TOUJOURS disponible et est accessible UNIQUEMENT à votre application, aucun autre application dans le système peuvent accéder aux fichiers de votre application enregistrées à cette partition.
Maintenant, je pense que ce que vous avez besoin est la de Stockage Externe parce qu'il est "lisible par tout le monde" et peut être consulté par n'importe qui et n'importe quelle des apps. L'inconvénient est qu'il peut ne pas être disponible dès l'utilisateur peut monter sur un périphérique USB - qui peut être retirée par l'utilisateur à tout moment.
Vous ne devriez pas utiliser ni
MODE_WORLD_WRITEABLE
niMODE_WORLD_READABLE
que par la documentation précise, car il est très dangereux. En outre, ces constantes ont été dépréciées depuis l'API de Niveau 17Recommandation
Si vous avez besoin pour rendre vos dossiers publics, puis de les enregistrer sur le de Stockage Externe. Vous aurez besoin de déclarer une autorisation dans votre fichier manifest pour éviter à votre application à partir de la plante à chaque fois qu'il accède à la de Stockage Externe...
parce que le de Stockage Externe peuvent ne pas être disponibles, vous aurez besoin pour déterminer l'état de celui-ci avant d'effectuer toute opération, sinon votre application crash...
Il n'y a plus d'informations sur la documentation et les choses que vous devez être conscients de. Par exemple, vous pouvez donner à votre application la propriété de ces fichiers, de sorte que lorsque votre application est désinstallée, le système peut automatiquement supprimer ces fichiers. Pour plus d'informations, veuillez vous référer à la la documentation sur le Site des Développeurs Android