gpt4 book ai didi

android - 如何区分android中的内部和外部SD卡路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:27 25 4
gpt4 key购买 nike

在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 手机中,可移动 sdcard 的确切路径因设备制造商而异。

见下表

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,无论可移动 sdcard 是否存在。

我们在谷歌上搜索并尝试了他们提供的一些功能。它只给出了挂载到设备的存储路径列表。但它没有指示是否存在可移除的 sdcard。

我尝试获取存储路径的函数:

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中的存储路径列表?也有助于解决上述问题。

最佳答案

获取内部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 );

关于android - 如何区分android中的内部和外部SD卡路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com