首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 獲取 SD 卡路徑的正確姿勢:Environment.getExternalStorageDirectory()

     編輯:程式設計綜合問答

常見誤區

許多開發者直接寫死路徑如 /storage/sdcard0/ 或 /mnt/sdcard/,但在不同裝置、Android 版本、多使用者環境下,這些路徑極不穩定,甚至導致讀寫失敗。

標準做法

  1. 先判斷儲存狀態:
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        // SD 卡可用,可讀寫
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        // 唯讀
    } else {
        // 不可用(未插入、格式化中、被 USB 掛載等)
    }
  2. 取得標準根目錄:
    File root = Environment.getExternalStorageDirectory(); // 回傳 /storage/emulated/0 等
    File myFile = new File(root, "test.txt"); // 安全拼接路徑
  3. 應用專屬目錄(推薦,無需權限):
    File appDir = context.getExternalFilesDir(null); // /storage/emulated/0/Android/data/包名/files
    // 寫入
    FileOutputStream fos = new FileOutputStream(new File(appDir, "data.txt"));
    優點:App 解除安裝時自動清理,不需 WRITE_EXTERNAL_STORAGE 權限(Android 4.4+)。

權限提醒

  • Android 6.0 (API 23) 以上需動態申請 READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE。
  • Android 10 (API 29) 強制分區儲存,直接存取共享目錄受限,建議改用 MediaStore 或 Storage Access Framework。

總結

永遠使用 Environment.getExternalStorageDirectory() 或 Context.getExternalFilesDir() 取得路徑,並搭配狀態檢查與權限申請,才能寫出相容性強、不易崩潰的檔案存取代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved