Android 11 引入了強(qiáng)制執(zhí)行分區(qū)存儲(chǔ)的限制,導(dǎo)致應(yīng)用默認(rèn)不能訪問外部文件。
針對(duì)以前涉及較多文件的操作,可采用申請(qǐng)所有文件訪問權(quán)限的方式來解決這一問題,實(shí)現(xiàn)方式如下。
(雖然這樣做安全性低,官方并不推薦這樣,但確實(shí)最快適配原有應(yīng)用程序的方式)
1. AndroidManifest.xml中添加如下內(nèi)容:
用于聲明應(yīng)用程序需要使用 MANAGE_EXTERNAL_STORAGE 權(quán)限。同時(shí),使用了 tools:ignore=“ScopedStorage” 來忽略與分區(qū)存儲(chǔ)(Scoped Storage)相關(guān)的 Lint 檢查。
<!-- Android11額外添加 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
2. 申請(qǐng)所有文件訪問權(quán)限,該操作會(huì)跳轉(zhuǎn)到所有文件權(quán)限申請(qǐng)頁面文章來源:http://www.zghlxwxcb.cn/news/detail-756396.html
// 請(qǐng)求文件訪問權(quán)限的請(qǐng)求碼,可以是任意整數(shù)值
private static final int REQUEST_MANAGE_FILES_ACCESS = 2;
//申請(qǐng)所有文件訪問權(quán)限
public void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
//判斷是否有管理外部存儲(chǔ)的權(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, REQUEST_MANAGE_FILES_ACCESS);
} else {
// TODO: 2023/11/22
// 已有所有文件訪問權(quán)限,可直接執(zhí)行文件相關(guān)操作
}
} else {
// TODO: 2023/11/22
//非android11及以上版本,走正常申請(qǐng)權(quán)限流程
}
}
3. 獲取用戶授權(quán)情況文章來源地址http://www.zghlxwxcb.cn/news/detail-756396.html
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_MANAGE_FILES_ACCESS) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// TODO: 2023/11/22
// 用戶已經(jīng)授予文件訪問權(quán)限
// 在這里執(zhí)行創(chuàng)建文件夾和初始化數(shù)據(jù)庫的操作
} else {
// TODO: 2023/11/22
// 用戶尚未授予文件訪問權(quán)限
// 可以在此處處理用戶未授予權(quán)限的情況
}
}
}
}
到了這里,關(guān)于android11 申請(qǐng)所有文件訪問權(quán)限的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!