在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
}
Run Code Online (Sandbox Code Playgroud)
为此,我们使用以下代码:
If (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){
String path= Environment.getExternalStorageDirectory().getPath();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在一些最新的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
Run Code Online (Sandbox Code Playgroud)
在这些设备中运行上述代码时,我们得到:
android API Environment.getExternalStorageDirectory().getPath()仅返回内部sd路径
此外,即使删除了sdcard,API Environment.getExternalStorageState()也会在上述设备中返回Environment.MEDIA_MOUNTED.
此外,API Environment.isExternalStorageRemovable()始终为上述设备返回false,无论是否存在可移动SD卡.
我们在谷歌搜索并尝试了他们给出的一些功能.它只给出了安装到设备的存储路径列表.但它并不表示是否存在removale 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;
}
Run Code Online (Sandbox Code Playgroud)
有没有比上面更好的其他功能来获取android中的存储路径列表?也有助于解决上述问题.
获取内部 SD 卡
String internalStorage = System.getenv("EXTERNAL_STORAGE");
File f_exts = new File(internalStorage );
Run Code Online (Sandbox Code Playgroud)
获取外部 SD 卡
String externalStorage = System.getenv("SECONDARY_STORAGE");
File f_secs = new File(externalStorage );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12475 次 |
| 最近记录: |