Android11 讀寫權(quán)限申請
Android11系統(tǒng)對應(yīng)用寫入權(quán)限做了嚴(yán)格的限制。本文介紹如何獲取文件讀寫權(quán)限。項(xiàng)目中 build.gradle 的targetSdkVersion >= 29 ,會(huì)出現(xiàn)讀寫問題。
當(dāng)targetSdkVersion = 29,通過設(shè)置requestLegacyExternalStorage=“true”,還能解決。
當(dāng)targetSdkVersion = 30后,需要申請所有文件權(quán)限才能獲取到寫入權(quán)限。
AndroidManifest添加權(quán)限設(shè)置
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
? ? ? ? tools:ignore="ScopedStorage" /><!--add 2022-2-11 Android11-->
<application
?? ?...
? ? android:requestLegacyExternalStorage="true"?
? ? ...
? ? >
? ? ? ??
代碼申請動(dòng)態(tài)權(quán)限
1.Android 6.0之上Android11以下申請權(quán)限
?
if (Build.VERSION.SDK_INT >= 23) {// 6.0
String[] perms = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE};
for (String p : perms) {
int f = ContextCompat.checkSelfPermission(SafeKeyToolActivity.this, p);
Log.d("---", String.format("%s - %d", p, f));
if (f != PackageManager.PERMISSION_GRANTED) {
requestPermissions(perms, 0XCF);
break;
}
}
}
Android11申請權(quán)限
跳轉(zhuǎn)系統(tǒng)設(shè)置界面,用戶授權(quán)獲取權(quán)限。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !isRefuse) {// android 11 且 不是已經(jīng)被拒絕
// 先判斷有沒有權(quán)限
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 1024);
}
}
// 帶回授權(quán)結(jié)果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1024 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 檢查是否有權(quán)限
if (Environment.isExternalStorageManager()) {
isRefuse = false;
// 授權(quán)成功
} else {
isRefuse = true;
// 授權(quán)失敗
}
}
}
?
對于部分手機(jī)如小米手機(jī),即使獲取了所有文件的管理權(quán)限,依舊訪問不到Android/data目錄,如圖:
?
?
嘗試解決辦法:文章來源:http://www.zghlxwxcb.cn/news/detail-409573.html
只在外部存儲(chǔ)的應(yīng)用私有目錄下,用直接路徑讀寫文件。
訪問或者共享媒體文件,使用MediaStore在公共目錄下讀寫文件
訪問或者共享非媒體文件,使用系統(tǒng)的文件選擇器SAF在公共目錄Download下讀寫文件。
根目錄下可以創(chuàng)建自定義文件夾、文件。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-409573.html
到了這里,關(guān)于Android11及以上 文件讀寫權(quán)限申請的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!