[英]Flutter Android 11 permissions like WhatsApp
我正在嘗試構建一個在 Android 11 上運行並下載文件的 Flutter 應用程序。 我曾經通過管理外部存儲權限來實現這一點,但是當應用程序請求權限時,它會直接進入設置,而不是在應用程序內請求允許或拒絕。
例如,WhatsApp 將數據存儲在android/media文件夾中,但它直接在應用程序內請求權限,而不是轉到設置頁面。 請參考以下圖片:
我的權限處理代碼
Future<bool> requestPermission() async {
var androidInfo = await DeviceInfoPlugin().androidInfo;
var release = int.parse(androidInfo.version.release);
Permission permission;
if (release < 11) {
permission = Permission.storage;
} else {
permission = Permission.manageExternalStorage;
}
if (await permission.isGranted) {
return true;
} else {
var result = await permission.request();
if (result == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
}
這是管理Android 11及更高版本的 Android 設備中外部存儲訪問的兩種不同方法。
文件 Go 正在嘗試訪問all files access permission
。 這使應用程序可以訪問任何讀取、寫入、訪問和共享用戶存儲(外部或內部)中存在的所有文件。 您可以從此處閱讀有關所有文件訪問權限的更多信息 - 管理存儲設備上的所有文件
WhatsApp - 不是要求all files access permission
,而是將其媒體保存在文件目錄中。 保存在文件或緩存目錄中不需要訪問所有蒼蠅,一個簡單的權限對話框來寫入和讀取存儲就可以完成任務。
您可以在getExternalFilesDir中閱讀更多相關信息。
注意:這僅適用於您的 targetSdkVersion 為 30 的情況。針對 29 或以下版本,不需要all files permission
,因為它由系統處理。
您可以參考Android 11 中存儲更新中的存儲更新並根據您的用例請求權限。
即使您使用的是 Android 11 或更高版本,我們也必須在 Flutter 中詢問存儲權限而不是管理外部存儲權限。我嘗試將文件寫入“android/media/packagename/”並且它工作正常,但是當我嘗試寫入其他位置它不起作用。 我認為 Android 內部以某種方式允許僅在同一個 package 中存儲數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.