MANAGE_EXTERNAL_STORAGE
權限可以存取整個外部儲存裝置(包含所有檔案和資料夾)。
雖然Android上的MANAGE_EXTERNAL_STORAGE
在使用上限制多多(例如上架認證手續非常繁雜),不過對於一些內部開發案,並不會上架Google上使用,不一定要大費周章寫SAF架構。
1.在AndroidManifest.xml新增權限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
2.新增後不能馬上使用,需要徵求使用者同意:
//取得MANAGE_EXTERNAL_STORAGE權限 fun requestManageExternalStoragePermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (!Environment.isExternalStorageManager()) { val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION) intent.data = Uri.parse("package:$packageName") startActivityForResult(intent, 100) } else { // 已經擁有權限,可以執行存取檔案的操作 Logger.d("Permission:已擁有 MANAGE_EXTERNAL_STORAGE 權限") } } else { // 如果是 Android 10 以下,則使用普通的儲存權限 ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 100) } } //取得權限賦予狀態 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 100) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Environment.isExternalStorageManager()) { Logger.d("Permission:已成功取得 MANAGE_EXTERNAL_STORAGE 權限") } else { Logger.d("Permission:無法取得 MANAGE_EXTERNAL_STORAGE 權限") } } } }
當使用者開啟允許後,就可以自由讀寫檔案了。
-END-
發佈留言