我的应用程序将文件存储在其内部存储目录中(/Android/data/com.mycompany.myapp/files,由 getFilesDir() 返回),我希望允许用户直接从文件管理器访问这些文件移动设备上的应用程序或 Android 文件传输桌面应用程序。
Storage Options developer guide说:
By default, files saved to the internal storage are private to your application and other applications cannot access them (nor can the user).
“默认情况下”意味着我可以更改默认权限以允许用户访问这些文件,但我找不到有关如何执行此操作的任何文档。目前,当我使用文件管理应用程序浏览/Android/data 目录时,com.mycompany.myapp 目录被隐藏。
我目前正在这样保存文件数据:
String fileName = "myfile.jpg";
String filePath = getFilesDir() + File.separator + fileName;
FileOutputStream fileStream = new FileOutputStream(filePath);
fileData.writeTo(fileStream); // fileData is a ByteArrayOutputStream
fileStream.close();
我尝试将单个文件的权限设置为世界可读,但这并没有使目录可见:
FileOutputStream fileStream = this.app.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
我还检查了 AndroidManifest 文件的文档,但没有看到任何内容。有谁知道我该怎么做?
最佳答案
我仔细查看了 getFilesDir()
与 getExternalFilesDir()
的结果,发现 getFilesDir()
返回 /data/data/[packagename]/files
而 getExternalFilesDir()
返回 /Android/data/[packagename]/files
。我以为我在 /Android/data
中浏览的应用程序文件是内部存储目录,但现在我发现那些实际上是外部存储目录。
如果内部存储目录确实对普通用户永远不可用,我希望文档说明这一点,而不是说它们“默认情况下”不可用。至少对我来说,说“默认”意味着可以更改默认行为。
无论如何,我测试并确认如果我删除我的应用程序,保存到 getExternalFilesDir()
的文件会自动删除。因此,这满足了我对存储位置的需求,该存储位置与应用程序明确相关(使用特定于应用程序的目录名称并随应用程序一起删除)但用户偶尔可以访问以进行手动文件管理。
下面是一个比较,可能对阅读本文的其他人有所帮助:
- getFilesDir() - 创建特定于应用程序的目录;对用户隐藏;用应用程序删除
- getExternalFilesDir() - 创建特定于应用程序的目录;用户可访问;用应用程序删除
- getExternalStoragePublicDirectory() - 使用共享目录(例如 Music);用户可访问;删除应用程序时仍然存在
关于android - 如何让用户访问我的应用程序的内部存储目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579869/