隱私指標

Android 6 及更高版本中的運行時權限使用戶能夠控制何時允許錄製來自裝置麥克風的音訊或來自裝置攝影機的視訊。在應用程式可以錄製之前,使用者必須透過系統顯示的對話方塊授予或拒絕其權限。

Android 12 透過在應用程式透過攝影機和麥克風應用程式操作權限使用私人資料來源時顯示指示器,為使用者提供透明度。應用程式操作記錄對執行時間權限保護的 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 。這會在系統伺服器中建立應用程式操作記錄。
  2. 系統 UI 使用AppOpsManager.OnOpActiveChangedInternalListenerOnOpNotedListener偵聽器偵聽新的應用程式操作。當新的使用情況出現時(透過呼叫startOpnoteOp ),系統 UI 會驗證該使用情況是否由系統應用程式進行。
  3. 如果系統 UI 驗證系統應用程式的使用情況,且該使用情況用於麥克風,則系統 UI 會檢查麥克風是否靜音。
  4. 如果系統 UI 驗證非系統應用程式使用情況(對於麥克風使用情況,麥克風已取消靜音;對於相機使用情況,相機已開啟),它會顯示反映此類使用情況的圖示。

如果系統 UI 收到一個沒有持續時間的noteOp ,它會顯示該圖示至少 5 秒。否則,圖示會顯示直到收到stopOp或 5 秒(以較長者為準)。使用者點擊圖示會啟動一個意圖,該意圖會轉到PermissionController以啟動對話方塊。

PermissionController載入麥克風和相機的所有最近使用情況。它檢查其中任何一個目前是否正在運行,或者是否在系統 UI 設定的時間範圍內運行。如果找到匹配項,則會顯示使用該權限的應用程式的名稱以及該應用程式所使用的權限。

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

在與 Android Google 搜尋應用程式 (AGSA) 和 Google 行動服務 (GMS) 搭配使用時,電話必須實現權限使用(以考慮電話通話中使用的單獨麥克風堆疊)。