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-
發佈留言