为什么getExternalFilesDirs()在某些设备上不起作用?

TOP*_*TOP 9 android android-sdcard android-external-storage

我的应用在Android 5.0上运行.我用方法getExternalFilesDirs()来检查外部SD卡是否可用.如果返回超过1 File,则表示存在外部SD卡.

但是在某些设备(例如Elephone G2)上,方法getExternalFilesDirs()只返回一个主存储目录.我确定该设备有外部SD卡(/ storage/sdcard1 /).

任何人都可以给我答案吗?

som*_*esh 13

要使getExternalFilesDirs返回sdcard的路径,OEM必须SECONDARY_STORAGE在设备特定的init.rc文件中设置环境变量,如下所述:https://source.android.com/devices/storage/config-example.html

看看源getExternalFilesDirs位置: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/ContextImpl.java#1039

该值来自Environment.buildExternalStorageAppFilesDirs.你看那个源位置: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#206

该值取决于mExternalDirsForApp,通过读取SECONDARY_STORAGE变量的内容来填充:http: //androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#136

如您所见,如果未设置SECONDARY_STORAGE变量,则不会返回sdcard路径.您可以通过转到adb shell并查看输出来交叉检查echo $SECONDARY_STORAGE

  • 谢谢.那么如果没有设置SECONDARY_STORAGE变量,我们就无法访问外部SD卡了? (2认同)

Moh*_*ami 5

在我使用此代码的项目中,我没有任何问题.

getExternalFilesDirs的方法返回2个长度的数组.

Dirs[0] ==> Internal Sorage Dirs[1] ==> External Storage

 File[] Dirs = ContextCompat.getExternalFilesDirs(MyApp.GetContext(), null);
Run Code Online (Sandbox Code Playgroud)

  • OP 特别要求一种不起作用的方法...您在答案中使用的方法... (2认同)