Android獲取外部SDcard的官方調用是
Environment.getExternalStorageDirectory()
但是根據不同機型,是有不同的結果的。
如果手機支持TF卡擴展,並且本身沒有大容量存儲,比如說HTC老款手機 G3之類的,那么獲取到的是TF卡的路徑。這是對的。
如果手機本身有大容量存儲,不論手機是否支持TF卡擴展,比如現在HTC系列高端手機One X,或者920 butterfly系列,那么獲取到的是大容量存儲的路徑。
也就是說,如果手機本身具有大容量存儲,又支持TF卡擴展,通過這條命令是無法獲取到TF卡信息的。
我查了半天,沒有看到明確獲取到擴展存儲的API方法,如果有,請你告訴我,謝謝。(cst05001 at 狗妹兒)
那么怎么解決這個問題呢。網上有人說用/sdcard/extSdCard路徑之類,這是不對的。因為不同的ROM,對外部存儲的掛載點是會不一樣的。比如三星國行,掛載點是/Storage/extSdCard 。
這是我從系統角度想到的解決辦法,不用越獄,不用權限。大家可以參考:
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
String mount = new String();
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount = mount.concat("*" + columns[1] + "\n");
}
} else if (line.contains("fuse")) {
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount = mount.concat(columns[1] + "\n");
}
}
}
txtView.setText(mount);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
