如何在/ Android / obb下创建文件夹?

时间:2017-07-26 20:49:12

标签: android apk-expansion-files

我尝试使用扩展文件,但发现了一个我无法解决的问题。

您似乎可以访问/Android/obb文件夹并最终删除/Android/obb/my.package.name目录(尝试使用某个文件管理器),但我无法在应用程序中处理这种情况。

如果我让Google Downloader库尝试下载扩展文件,它会挂起并出错(对于丢失的文件夹),但如果我重新创建该文件夹,它将会启动。

奇怪的是,我能够从其他应用程序(我用来查看目录的同一个文件管理器)创建文件夹但不是来自我的

我试过

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编译。

2 个答案:

答案 0 :(得分:2)

OP将Target SDK放弃到22并且能够避免导致问题的危险权限工作流程。

答案 1 :(得分:0)

I had this same problem,但是降低目标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.
}

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