Android開發中如何獲取外接TF卡的路徑
阿新 • • 發佈:2019-01-10
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(); }