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

Android File.mkdirs() 部分手機創建失敗:權限與 Android 6.0+ 動態權限

     編輯:程式設計疑難解答

現象

同樣代碼 File.mkdirs() 部分手機成功,部分失敗。獲取路徑用 Environment.getExternalStorageDirectory()。

核心原因

  • Android 6.0 (API 23)+ 需動態申請權限:WRITE_EXTERNAL_STORAGE 必須運行時請求用戶授權,清單文件聲明不夠。
  • 部分廠商 ROM 限制外部存儲訪問(如華為、小米需額外授權「存儲權限」)。
  • 路徑是否真實可寫:Environment.getExternalStorageState() == MEDIA_MOUNTED。

解決代碼

// 1. 清單聲明


// 2. 運行時請求 (Activity/Fragment)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}

// 3. 回調中創建目錄
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        createDir();
    }
}

兼容性建議

  • 優先使用 Context.getExternalFilesDir(null) 獲取應用專屬目錄(無需權限,應用卸載自動清理)。
  • 使用 Storage Access Framework (ACTION_OPEN_DOCUMENT_TREE) 讓用戶選擇目錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved