如何创建在/安卓/ OBB文件夹?(How to create a folder under /An

2019-09-28 20:10发布

我试图使用扩展文件,我发现我不能够解决的问题。

看来你可以访问/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编译。

Answer 1:

OP下降目标SDK到22,并能避免造成此问题的危险许可工作流程。



Answer 2:

我有同样的问题 ,但降低目标SDK是不是一种选择。

所述Context::getObbDir()方法允许访问扩展文件夹没有通常安全规则。 我发现,如果该文件夹不存在, getObbDir()创建它太(您也可以仔细检查,并与手动创建mkdir()

从文档摘录上面链接:

返回主共享/外部存储其中此应用程序的OBB的文件(如果有的话)可以找到目录。 注意:如果应用程序没有任何OBB文件,该目录可能不存在。

这就好比getFilesDir()中,这些文件将在卸载应用程序,但也有一些重要的差异被删除:

...在开始Build.VERSION_CODES.KITKAT ,不需要的权限读取或写入的路径,这种方法的回报。 ...

从开始Build.VERSION_CODES.NManifest.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.
}

注意:您可能需要的读/写权限的文件夹中访问扩展文件



文章来源: How to create a folder under /Android/obb?