我试图使用扩展文件,我发现我不能够解决的问题。
看来你可以访问/Android/obb
文件夹,并最终删除/Android/obb/my.package.name
目录(有一些文件管理器尝试过),但我不能处理这种情况whithin应用。
如果我只是让谷歌下载库尝试下载扩展文件也将挂起和错误(失踪的文件夹),但如果我重新创建文件夹,将开始。
奇怪的是,我能够创造从(我已经见惯了目录相同的文件管理器), 但不能从我的其他应用程序的文件夹!
我试着用
File f = new File(Environment.getExternalStorageDirectory(), "Android/obb/my.package.name");
f.mkdirs();
但它不工作。
我在清单的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
和我针对API 23,并与25编译。
OP下降目标SDK到22,并能避免造成此问题的危险许可工作流程。
我有同样的问题 ,但降低目标SDK是不是一种选择。
所述Context::getObbDir()
方法允许访问扩展文件夹没有通常安全规则。 我发现,如果该文件夹不存在, getObbDir()
创建它太(您也可以仔细检查,并与手动创建mkdir()
从文档摘录上面链接:
返回主共享/外部存储其中此应用程序的OBB的文件(如果有的话)可以找到目录。 注意:如果应用程序没有任何OBB文件,该目录可能不存在。
这就好比getFilesDir()
中,这些文件将在卸载应用程序,但也有一些重要的差异被删除:
...在开始Build.VERSION_CODES.KITKAT
,不需要的权限读取或写入的路径,这种方法的回报。 ...
从开始Build.VERSION_CODES.N
, Manifest.permission.READ_EXTERNAL_STORAGE
许可不是必需的,所以不要问在运行时此权限。 ...
所以,你可以这样做:
File obbDir = getObbDir();
if (null == obbDir) {
// Storage is not available
} else if (!obbDir.exists() && !obbDir.mkdir()) {
// Failed to create directory. Shouldn't happen but you never know.
}
注意:您可能需要的读/写权限的文件夹中访问扩展文件 。