標籤:path android外置sd 外置sd路徑 android開發 sd路徑
android系統可通過Environment.getExternalStorageDirectory()擷取儲存卡的路徑,但是現在有很多手機內建有一個儲存空間,同時還支援外置sd卡插入,這樣通過Environment.getExternalStorageDirectory()方法擷取到的就是內建儲存卡的位置,需要擷取外置儲存卡的路徑就比較麻煩,這裡借鑒網上的代碼,稍作修改,在已有的手機上做了測試,效果還可以,當然也許還有其他的一些奇葩機型沒有覆蓋到。
package com.example.getpath;import java.io.BufferedReader;import java.io.File;import java.io.InputStream;import java.io.InputStreamReader;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.util.Log;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getPath2();}@SuppressLint("SdCardPath")public String getPath2() {String sdcard_path = null;String sd_default = Environment.getExternalStorageDirectory().getAbsolutePath();Log.d("text", sd_default);if (sd_default.endsWith("/")) {sd_default = sd_default.substring(0, sd_default.length() - 1);}// 得到路徑try {Runtime runtime = Runtime.getRuntime();Process proc = runtime.exec("mount");InputStream is = proc.getInputStream();InputStreamReader isr = new InputStreamReader(is);String line;BufferedReader br = new BufferedReader(isr);while ((line = br.readLine()) != null) {if (line.contains("secure"))continue;if (line.contains("asec"))continue;if (line.contains("fat") && line.contains("/mnt/")) {String columns[] = line.split(" ");if (columns != null && columns.length > 1) {if (sd_default.trim().equals(columns[1].trim())) {continue;}sdcard_path = columns[1];}} else if (line.contains("fuse") && line.contains("/mnt/")) {String columns[] = line.split(" ");if (columns != null && columns.length > 1) {if (sd_default.trim().equals(columns[1].trim())) {continue;}sdcard_path = columns[1];}}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Log.d("text", sdcard_path);return sdcard_path;}}
Android擷取系統外置儲存卡路徑的方法