在Android应用程序中我需要做:
If(removable SdCard is present){
String path=get the path of removable Sdcard() ;
//using this path we will create some files in sdcard
} else{
//display error message
}
为实现这一目标,我们将代码用作:
If (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){
String path= Environment.getExternalStorageDirectory().getPath();
}
以上代码在一些最新的Android手机中失败了。请帮助我们。
以下是我们尝试过的详细信息:
见下表
Tested Devices OS version removable sdcard path internal sd path
Samsung galaxy s2 4.0.4 /mnt/sdcard/external_sd /mnt/sdcard
Samsung S Advance 4.1.2 /storage/extSdCard /storage/sdcard0
Samsung Galaxy s3 4.0.4 /mnt/extSdCard /mnt/sdcard
Samsung Galaxy Note 4.0.4 /mnt/sdcard/external_sd /mnt/sdcard
在这些设备中运行上述代码时,我们得到了:
android API Environment.getExternalStorageDirectory()。getPath()仅返回内部sd路径
此外,即使删除了sdcard,API Environment.getExternalStorageState()也会在上述设备中返回Environment.MEDIA_MOUNTED。
此外,对于上述设备,API Environment.isExternalStorageRemovable()始终返回false,无论是否存在可移动SD卡。
我们在谷歌搜索并尝试了他们给出的一些功能。它只提供了安装到设备的存储路径列表。但它并不表示是否存在删除标识卡。
我尝试获取存储路径的功能:
private static String getMountedPaths(){
String sdcardPath = "";
Runtime runtime = Runtime.getRuntime();
Process proc = null;
try {
proc = runtime.exec("mount");
} catch (IOException e1) {
e1.printStackTrace();
}
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
try {
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//TF card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount.add(columns[1]);
sdcardPath=columns[1];
}
} else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount.add(columns[1]);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return sdcardPath;
}
有没有比上面更好的其他功能来获取android中的存储路径列表? 也有助于解决上述问题。
答案 0 :(得分:2)
获取内部SD卡
String internalStorage = System.getenv("EXTERNAL_STORAGE");
File f_exts = new File(internalStorage );
获取外部SD卡
String externalStorage = System.getenv("SECONDARY_STORAGE");
File f_secs = new File(externalStorage );