隱私指標

Android 6 及更高版本中的運行時權限允許用戶控制何時允許錄製來自設備麥克風的音頻或來自設備攝像頭的視頻。在應用程序可以錄製之前,用戶必須通過系統顯示的對話框授予或拒絕它的權限。

當應用通過攝像頭和麥克風應用操作權限使用私有數據源時,Android 12 會顯示指示器,從而為用戶提供透明度。 App-ops 記錄對運行時權限保護的 API 的訪問。

App-op 跟踪活動狀態和單個 API 調用的數量,並與 Android 12 中的麥克風和攝像頭指示器交互,以在應用訪問其設備上的音頻和攝像頭數據時向用戶顯示。當用戶單擊麥克風或攝像頭指示器時,他們會看到哪些應用訪問了他們的數據。此功能對於所有 OEM 都是強制性的。

指標可見性要求

以下是運行 Android 12 或更高版本的設備上麥克風和攝像頭指示燈的要求:

  • 指示器必須出現在狀態欄中,並保持最高的視覺優先級(例如,位於右上角的最右邊)。
  • 指示器必須始終位於同一位置,並且在啟動時不得被應用程序阻止。
  • 兩個指示器的顏色必須為綠色(或綠色的變體)。
  • 單擊一個或兩個指示器必須呈現應用程序屬性提示通知,該通知執行以下操作:
    • 顯示正在使用麥克風和(或)攝像頭的應用程序的名稱
    • 顯示在過去 15 秒內使用麥克風和(或)攝像頭的應用程序的名稱
    • 將用戶帶到“設置”中的應用權限頁面

用途和特點

在 Android 12 中,UI 區分正在運行的使用情況和最近的使用情況。如果使用被系統標記為“正在運行”,或者使用時間少於 5 秒,則認為它們是“活動的”。

  • 每次應用程序具有持續的用戶敏感麥克風或攝像頭訪問權限時,都會顯示狀態欄圖標。
  • 用戶可以單擊這些圖標並查看哪些應用程序正在訪問麥克風、攝像頭或兩者。

Microphone and camera in-use indicators showing that access is active

圖 1.顯示活動訪問的麥克風和攝像頭使用中指示器(右上角)

只要指示器顯示,訪問就被認為是有效的。首先顯示一個圖標,然後過渡到一個持續存在的點,直到應用程序被關閉或關閉。

當用戶點擊指示器時,會打開一個對話框,顯示應用當前正在使用攝像頭、麥克風或兩者。

Indicators for both active and recent access, and whether the access was from camera or microphone

圖 2.活動和最近訪問指標

圖 2中的圖像顯示了過去 5 秒內正在運行的應用程序訪問數據時的活動訪問指示器。

最近訪問指示器顯示應用程序在前 15 秒內訪問了數據,但該應用程序未處於活動狀態。所有活動的應用程序都會顯示在對話框中,但只有一個應用程序顯示為最近訪問的來源,即使超過 1 個應用程序在之前的 15 秒時間範圍內訪問了數據。訪問視圖保持凍結狀態,直到用戶關閉通知對話框。

交付和啟用

PermissionManager類提供了一種填充對話框的方法,該對話框位於系統 UI 中。

  • 系統 UI 對設備配置開關做出反應: privacy/mic_camera_indicators_enabled
  • 切換是必要的,因為有兩個單獨的交付車輛,按以下順序:
    1. 遞送。
    2. 使能夠。
  • 如果PermissionManager中的方法無法提供所需的數據,則係統 UI 不得崩潰。

工藝流程

權限指示器功能具有三個主要部分:

  • 應用程序
  • 指標(由 SystemUI 處理)
  • 一種確定哪些應用程序正在使用數據的方法

PermissionController提供了確定哪些應用程序正在使用數據的機制。 SystemUI 使用私有數據偵聽應用程序。 SystemUI 在頂部導航欄中顯示一個圖標,該圖標對應於所使用的權限。當用戶單擊圖標時, PermissionController會顯示有關使用情況的數據。

Process flow for Permission Indicator functions

圖 3.系統組件和 (UI) 轉換流程

圖 3中的編號轉換如下所述:

1-應用程序向系統請求私有數據。

2-系統檢查權限。如果權限允許,系統會通知數據提供者,並在 app-ops 中註明使用情況

3-數據提供者向應用程序提供數據。

4-5用戶點擊圖標。系統 UI 從PermissionManager請求數據並將對話框呈現給用戶。

流程詳情

  1. 應用程序使用麥克風和攝像頭,調用AppOpsManager.startOpstopOp和(或) noteOp 。這會在系統服務器中創建 app-op 記錄。
  2. 系統 UI 使用AppOpsManager.OnOpActiveChangedInternalListenerOnOpNotedListener偵聽器偵聽新的應用操作。當有新的用法出現時(通過調用startOpnoteOp ),系統 UI 會驗證該用法是由系統應用程序使用的。
  3. 如果系統 UI 驗證系統應用程序的使用情況,並且如果使用的是麥克風,則係統 UI 會檢查麥克風是否已靜音。
  4. 如果系統 UI 驗證了非系統應用程序的使用情況(並且,對於麥克風使用情況,麥克風未靜音;對於攝像頭使用情況,攝像頭已打開),它會顯示一個反映此類使用情況的圖標。

如果 System UI 收到一個沒有持續時間的noteOp ,它會顯示該圖標至少 5 秒。否則,圖標將顯示直到收到stopOp或 5 秒,以較長者為準。用戶單擊圖標會啟動一個意圖,該意圖會轉到PermissionController以啟動對話框。

PermissionController加載麥克風和攝像頭的所有最近使用情況。它檢查其中是否有任何當前正在運行,或者是否在系統 UI 設置的時間範圍內運行。如果找到匹配項,則會顯示使用該權限的應用程序的名稱,以及該應用程序使用了哪些權限。

由於 Android 12 及更高版本中的這一變化,一些應用必須改變其行為或實現特殊行為。

Telephony 在使用 Android Google Search 應用程序 (AGSA) 和 Google 移動服務 (GMS) 時,必須實現權限使用(以說明電話中使用的單獨麥克風堆棧)。