1. 程式人生 > >Android開發中如何獲取外接TF卡的路徑

Android開發中如何獲取外接TF卡的路徑

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();
		}