Android check for SD Card mounted always returns true
我的问题也已经被提早了,因为没有令人满意的答案,所以我陷入了困境。我的要求很简单。我正在开发一个应用程序,在该应用程序中,我需要让用户选择要保存在应用程序下载中的存储。我需要一种方法来确认存在外部SD卡。已经尝试了以下方法:
由于以下原因,这总是返回true:https://stackoverflow.com/a/7790228/3475715
final Boolean isSDPresent = Environment.getExternalStorageState().
equals(android.os.Environment.MEDIA_MOUNTED);
以下操作也不起作用,因为不同的手机的硬编码路径可能不同
File file = new File("/mnt/extSdCard");
try {
File list[] = file.listFiles();
Toast.makeText(getApplicationContext(),
"Yes sdcard is mounted,file count " + list.length,
Toast.LENGTH_LONG).show();
} catch (NullPointerException o) {
Toast.makeText(getApplicationContext(),
"Sorry no sdcard is mounted:", Toast.LENGTH_LONG).show();
}
任何建议表示赞赏!
最佳答案
您应该使用getExternalFilesDirs方法。此方法将路径返回到内存和Micro SD卡(如果有)。返回的第二个路径将是Micro SD卡的路径。但是该路径可能不是Micro SD卡的根目录。
API级别19中引入的getExternalFilesDirs
是可用于获取SD卡路径的唯一官方方法。所有其他方法将返回内部存储器的公共或私有存储位置(路径)。
我已经在手机和模拟器上测试了此方法。请注意,在测试过程中,我已将null
作为getExternalFilesDirs
的参数传递。但是,您也可以传递Environment.DIRECTORY_PICTURES
,Environment.DIRECTORY_MOVIES
等参数。
检测结果:-
手机插入存储卡后,getExternalFilesDirs
返回:
第一条路径(内部存储器):/storage/emulated/0/Android/data/my_package.appname/files
第二路径(Micro SD):/storage/sdcard1/Android/data/my_package.appname/files
注意:我的SD卡的根目录为:/storage/sdcard1
在我的模拟器上,getExternalFilesDirs
返回:
第一条路径(内部存储器):/storage/emulated/0/Android/data/my_package.appname/files
第二路径(Micro SD):/storage/11E9-4214/Android/data/my_package.appname/files
注意:在仿真器上,SD卡是仿真的(不是真实的)。
如果已弹出Micro SD卡(在电话或仿真器上),则getExternalFilesDirs
返回null
第一条路径(内部存储器):path to internal memory - It varies depending on device
第二路径(Micro SD):null
但是;
在某些设备上,您可能无法获得Micro SD卡路径。这意味着getExternalFilesDirs
将仅返回一个路径(内部存储器)。第二条路径为空,即不会返回任何第二条路径。
原因:该特定设备的OEM可能未在设备中设置路径(即SECONDARY_STORAGE
环境变量)。
This answer表示this question说,
OEM必须在以下位置设置SECONDARY_STORAGE环境变量
特定于设备的init.rc
文件,如下所示:
https://source.android.com/devices/storage/config-example.html
另外,somesh对上述answer所作的评论说:
如果未设置该环境变量,则无法写入sdcard
通过使用getExternalFilesDirs
,因为它不会返回
sdcard路径。
在这种情况下,请假定不存在存储卡,然后将要保存的任何内容保存在内存中。
总结一下,如果getExternalFilesDirs
不返回第二条路径或返回的第二条路径是null
,请不要存储在SD卡中(存储在内部存储器中);否则存储在getExternalFilesDirs
返回的第二条路径中
建议:
要了解Android中不同的存储位置,请通过my answer on stackoverflow
关于android - 确定SD卡是否存在的确定方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39444607/