Android311 的權限更新

Android 11 可讓使用者指定更精細的 位置、麥克風和相機權限。此外,系統 針對未使用應用程式,以 Android 11 或 因此,應用程式可能需要更新自己聲明的權限 使用系統快訊視窗或查看電話號碼相關資訊。

單次授權

從 Android 11 開始,每當應用程式要求權限時 有關位置、麥克風或相機的資訊,則向使用者顯示的權限對話方塊 包含名為「僅允許這一次」的選項。如果使用者在對話方塊中選取這個選項,您的應用程式就會獲得暫時的單次授權

進一步瞭解系統如何處理一次性問題 權限

針對未使用的應用程式自動重設權限

如果應用程式指定 Android 11 以上版本為目標,但尚未使用少數應用程式 則系統會自動重設機密資料,以保護使用者資料。 執行階段權限,也就是使用者已授予應用程式的執行階段權限。這項操作 就像使用者在系統設定中檢視權限後, 將應用程式存取層級設為「拒絕」。如果您的應用程式遵循 在執行階段要求權限 不需要對應用程式進行任何修改。這是因為 會與應用程式中的功能互動,請先確認這些功能是否 授予所需的權限

進一步瞭解系統如何自動重設未使用時的權限 應用程式

權限對話方塊的顯示設定

自 Android 11 起,如果使用者輕觸「拒絕」 在應用程式的安裝生命週期中,出現超過 1 次的特定權限 裝置時,如果您的應用程式是應用程式,使用者不會看到系統權限對話方塊 再次要求該權限。使用者的動作暗示著「不要再詢問」。啟用 舊版使用者介面上,每次系統存取應用程式時,都會看到系統權限對話方塊 應用程式要求權限,除非使用者先前選取了「不要詢問」 可以再說一次」核取方塊或選項。不建議在 Android 11 中使用這項行為變更 重複要求權限。

使用者可能會永久拒絕授予應用程式權限,如要確認是否如此 (出於偵錯和測試目的),請使用下列指令:

adb shell dumpsys package PACKAGE_NAME

其中 PACKAGE_NAME 是要檢查的套件名稱。

您可以在指令輸出內容中看到類似下方的區段:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

遭使用者拒絕一次的權限會標記 USER_SET。如果是遭使用者選取「拒絕」兩次,表明要永久拒絕的權限,則會標記 USER_FIXED

在測試期間,您可能需要重設這些標記,確保測試人員不會 要求對話方塊未顯示時的畫面。方法是使用下列指令:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME 是您要授予的權限名稱 重設。如要查看 Android 應用程式權限的完整清單,請參閱「權限 API 參考資料頁面

進一步瞭解如何處理權限 發生頻率錯誤

系統快訊視窗變更

Android 11 對應用程式授予 SYSTEM_ALERT_WINDOW敬上 權限。這些異動旨在保護使用者, 並主動出擊

特定應用程式收到要求後,會自動取得 SYSTEM_ALERT_WINDOW 權限

特定類別的應用程式會自動授予 SYSTEM_ALERT_WINDOW 應徵要求的權限:

  • 符合下列條件的任何應用程式: ROLE_CALL_SCREENING敬上 並要求 SYSTEM_ALERT_WINDOW 自動授予權限。如果 應用程式會失去 ROLE_CALL_SCREENING 權限。

  • 任何透過 MediaProjection敬上 並要求 SYSTEM_ALERT_WINDOW 自動授予權限 除非使用者明確拒絕授予應用程式權限。應用程式 如果停止擷取螢幕畫面,就會失去權限。這種用途主要是 適用於遊戲直播應用程式

這些應用程式不需要傳送 ACTION_MANAGE_OVERLAY_PERMISSION敬上 取得 SYSTEM_ALERT_WINDOW 權限;應用程式可以直接要求 SYSTEM_ALERT_WINDOW

MANAGE_OVERLAY_PERMISSION 意圖一律將使用者移至系統權限畫面

從 Android 11 開始 ACTION_MANAGE_OVERLAY_PERMISSION敬上 意圖一律會將使用者導向頂層「設定」畫面,其中 使用者授予或撤銷 SYSTEM_ALERT_WINDOW 授予應用程式權限系統會忽略意圖中的所有 package: 資料。

在舊版 Android 中,ACTION_MANAGE_OVERLAY_PERMISSION 意圖 可指定套件,將使用者導向應用程式的特定畫面 以便管理權限自 起不再支援這項功能 Android 11.相反地,使用者必須先選取想使用的應用程式 授予或撤銷權限。這項異動旨在保護使用者 以更謹慎的方式授予權限

電話號碼

Android 11 變更了應用程式的手機相關權限 用於讀取電話號碼。

如果您的應用程式指定 Android 11 以上版本為目標,而且需要存取 下列清單中顯示的電話號碼 API,您必須要求 READ_PHONE_NUMBERS敬上 而不是 READ_PHONE_STATE 權限。

如果您的應用程式宣告 READ_PHONE_STATE,以便呼叫其他方法, 上一個清單,您可以繼續要求 READ_PHONE_STATE 為所有 Android 版本。如果您的 READ_PHONE_STATE 權限僅適用於 方法,但是會以下列方式更新您的資訊清單檔案:

  1. 變更 READ_PHONE_STATE 宣告,讓應用程式使用 這項權限僅適用於 Android 10 (API 級別 29) 以下版本。
  2. 新增 READ_PHONE_NUMBERS 權限。

下列資訊清單宣告程式碼片段示範了這個程序:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

其他資源

如要進一步瞭解 Android 11 中的權限變更,請參閱 以下資料:

影片

在開發時採用最新的隱私權異動, Android 11