簡體   English   中英

Flutter Android 11 權限如 WhatsApp

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM