我的应用程序将文件存储在其内部存储目录(/Android/data/com.mycompany.myapp/files,由getFilesDir()返回),我希望允许用户直接从他们的文件管理应用程序访问这些文件移动设备或Android文件传输桌面应用程序.
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()vs getExternalFilesDir()的结果,发现getFilesDir()返回/ data / data / [packagename] / files,而getExternalFilesDir()返回/ Android / data / [packagename] / files.我认为我在/ Android / data中浏览的应用程序文件是内部存储目录,但现在我看到那些实际上是外部存储目录.
如果内部存储目录确实永远不会被普通用户使用,我希望文档说不是说“默认情况下”它们不可用.至少对我来说,“默认情况下”表示可以更改默认行为.
无论如何,我测试并确认如果删除我的应用程序,保存到getExternalFilesDir()的文件会自动删除.这样就满足了我对与应用程序明确连接的存储位置的需求(使用特定于应用程序的目录名称并随应用程序删除),但用户可以访问,以便偶尔进行手动文件管理.
这是一个比较,可能有助于其他人阅读此内容:
> getFilesDir() – 创建特定于应用程序的目录;隐藏于用户之外;随应用删除
> getExternalFilesDir() – 创建特定于应用程序的目录;用户可以访问;随应用删除
> getExternalStoragePublicDirectory() – 使用共享目录(例如,音乐);用户可以访问;应用程序删除后仍然存在
标签:fileoutputstream,android,file-permissions
来源: https://codeday.me/bug/20190926/1818560.html