【问题标题】:System.getenv("SECONDARY_STORAGE") return null on some devicesSystem.getenv("SECONDARY_STORAGE") 在某些设备上返回 null
【发布时间】:2014-10-30 11:40:23
【问题描述】:
我正在尝试获取 android 设备上的外部存储列表,在某些设备中,指令 System.getenv("SECONDARY_STORAGE"); 返回 null,尽管 sd 卡已安装在设备中 (4.1.1)。
我正在使用Dimitriy 解决方案来执行此操作并且工作正常,但在某些设备中我遇到了这个问题。
有人知道在什么情况下System.getenv("SECONDARY_STORAGE") 可以返回null?
非常感谢
【问题讨论】:
标签:
android
storage
external
【解决方案1】:
在我的实验中,
调用System.getenv("SECONDARY_STORAGE")时,一些旧的HTC设备会返回null
我发现此类设备中的实际 microSD 路径安装在
/storage/sdcard0/ext_sd/
/sdcard2/
/mnt/sdcard/ext_sd/
由于外部存储环境变量由手机制造商定义。
我们没有 API 来准确获取 microSD 路径。
【解决方案2】:
这里是解决方案。
试试看……
首先获取列表中的所有文件
var file=new Java.IO.File("storage/");
var listOfStorages=file.ListFiles();
var isSDPresent=false;
if(listOfStorages[1].Name.Containes("emulated")||listOfStorages[0].Name.Containes("-"))
{
isSDPresent=true;
}
【讨论】:
-
感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。