【发布时间】:2014-01-28 11:29:45
【问题描述】:
我想检查设备上的 SD 卡是否可用。现在 Android 设备提供内部设备内存,Android 系统认为该内存位于路径 Environment.getExternalStorageDirectory()。因此,当我们检查 SD 卡状态系统时,它总是说它可用。如何区分这两种类型的内存?
【问题讨论】:
-
但是没有正确答案。
标签: android
我想检查设备上的 SD 卡是否可用。现在 Android 设备提供内部设备内存,Android 系统认为该内存位于路径 Environment.getExternalStorageDirectory()。因此,当我们检查 SD 卡状态系统时,它总是说它可用。如何区分这两种类型的内存?
【问题讨论】:
标签: android
你可以得到状态:
String state = Environment.getExternalStorageState();
然后,例如,如果您要检查 SDCARD 是否已挂载:
if (Environment.MEDIA_MOUNTED.equals(state))
您可以在http://developer.android.com/reference/android/os/Environment.html找到更多信息。
有一个很好的 SO 帖子 here 谈论通过 USB 检测已安装的 sd 卡.. 问候。
更新:
外部存储与 SD 卡不同,至少在所有设备上都不同。具有内部闪存的设备(例如我的 Nexus 4)将其视为“外部存储”。
现在,同时具有内部闪存和 SD 卡的设备,威胁内部闪存作为外部存储器,然后将 SD 卡添加为该外部存储器下的目录。
从程序员的角度来看,这是一种痛苦,但我们对此无能为力。有一个很好的帖子here 详细介绍了External Storage。
【讨论】:
有一个代码可以检查存储卡是否可用。
File file=new File("/sys/block/mmcblk1");
String sd_cid = null;
try {
String memBlk;
if (file.exists() && file.isDirectory()) {
memBlk = "mmcblk1";
} else {
//System.out.println("not a directory");
memBlk = "mmcblk0";
}
Process cmd = Runtime.getRuntime().exec("cat /sys/block/"+memBlk+"/device/cid");
BufferedReader br = new BufferedReader(new InputStreamReader(cmd.getInputStream()));
sd_cid = br.readLine();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果 sd_cid 为空,则存储卡不可用。
【讨论】:
【讨论】:
Environment.isExternalStorageRemovable() 提供您的外部存储是否可移动的信息。如果返回 true,则表示您的外部存储已被删除,因此这意味着设备上存在 SD 卡。
【讨论】: