android获取外部sd卡路径,如何区分android中的内部和外部SD卡路径
在
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手机中失败了.请帮助我们.
以下是我们尝试过的细节:
>在具有ICS和JellyBean操作系统的Android手机中,可移动SD卡的确切路径因设备制造商而异.
见下表
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中的存储路径列表?
也有助于解决上述问题.