Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android使用Linux mount獲取SdCard存儲目錄

Android使用Linux mount獲取SdCard存儲目錄

編輯:關於Android編程

Android的智能手機各不相同,現在很多Android智能手機都是自帶存儲,有的還帶有擴展內存的Sdcard卡槽。
在Android開發中,很多時候根據Android提供的獲取SdCard存儲方法獲取不到不到存儲目錄的位置,由於Android的系統是linux系統,所以我想到使用linux命令mouunt來獲取linux的掛載目錄。

這樣呢,基本上在Android上都可以獲取到應用數據存放的目錄。
使用命令獲取到的目錄我並沒有遍歷,如果你還是獲取不到,可以把mount獲去到的所有目錄都遍歷一次。

File  sdcard ;
@SuppressLint(SdCardPath)
    public File getSdCardFile() {
        if (sdcard != null) {
            return sdcard;
        }
        List list = getExtSDCardPath();
        boolean isRun = true;
        if (list.size() > 0) {
            sdcard = new File(list.get(list.size() - 1));
            if (sdcard.isDirectory()) {
                if (sdcard.getFreeSpace() == 0) {
                    isRun = true;
                } else {
                    isRun = false;
                }
            }
        }
        if (isRun) {
            sdcard = Environment.getExternalStorageDirectory();
            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                sdcard = new File(/sdcard/);
                log.e(sdcard  spance: + sdcard.getFreeSpace());
                if (sdcard.getFreeSpace() == 0) {
                    sdcard = new File(/sdcard1/);
                    log.e(sdcard1 space: + sdcard.getFreeSpace());
                }
                if (sdcard.getFreeSpace() == 0) {
                    sdcard = new File(/sdcard2/);
                    log.e(sdcard2 space: + sdcard.getFreeSpace());
                }
            }
        }
        log.e(data: + sdcard.getAbsolutePath());
        return sdcard;
    }

    public List getExtSDCardPath() {
        List lResult = new ArrayList();
        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(mount);
            InputStream is = proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                if (line.contains(extSdCard)) {
                    String[] arr = line.split( );
                    String path = arr[1];
                    if (path.lastIndexOf(extSdCard) == path.length() - 9) {
                        File file = new File(path);
                        if (file.isDirectory()) {
                            lResult.add(path);
                        }
                    }
                } else if (line.contains(/sdcard)) {
                    String[] arr = line.split( );
                    String path = arr[1];
                    if (path.lastIndexOf(/sdcard) == path.length() - 6) {
                        File file = new File(path);
                        if (file.isDirectory()) {
                            lResult.add(path);
                        }
                    } else {
                        String number = path.substring(path.lastIndexOf(/sdcard) + 7);
                        try {
                            Integer.parseInt(number);
                            File file = new File(path);
                            if (file.isDirectory()) {
                                lResult.add(path);
                            }
                        } catch (Exception e) {
                        }
                    }
                }
            }
            isr.close();
        } catch (Exception e) {
        }
        return lResult;
    }

不過,首選獲取存儲還是先使用Android提供的方法,判斷並獲取Sdcard目錄。

//判斷sdcard是否存在
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
//如果存在,獲取存儲File目錄
Environment.getExternalStorageDirectory();

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved