Android 6 以上版本的執行階段權限可讓使用者控制何時允許系統錄製裝置麥克風的音訊或裝置相機的影片。應用程式必須先取得使用者的許可,才能開始錄製。使用者必須透過系統顯示的對話方塊,授予或拒絕應用程式權限。
Android 12 會在應用程式透過相機和麥克風的 app-op 權限使用私密資料來源時,顯示指標,讓使用者瞭解情況。App-ops 會記錄對執行階段權限保護 API 的存取權。
App-op 會追蹤活動狀態和個別 API 呼叫數量,並與 Android 12 中的麥克風和相機指標互動,向使用者顯示應用程式何時在裝置上存取音訊和相機資料。使用者點選麥克風或相機圖示時,會看到哪些應用程式存取了他們的資料。所有原始設備製造商 (OEM) 都必須提供這項功能。
指標顯示規定
以下是搭載 Android 12 以上版本的裝置,針對麥克風和相機指示燈的要求:
- 指標必須顯示在狀態列中,並保留最高的視覺優先順序 (例如位於右上角最右邊的位置)。
- 指標必須一律位於相同位置,且不得在應用程式啟動時遭到阻擋。
- 兩個指標的顏色都必須是綠色 (或綠色的變化)。
- 點選一個或兩個指標時,必須顯示應用程式歸屬資訊可用性通知,並執行下列操作:
- 顯示正在使用麥克風和/或相機的應用程式名稱
- 顯示過去 15 秒內使用麥克風和/或相機的應用程式名稱
- 將使用者帶往「設定」中的應用程式權限頁面
用法和功能
在 Android 12 中,使用者介面會區分執行中的用法和近期用法。如果系統標示使用情形為執行中,或是使用情形發生在 5 秒內,系統就會將使用情形視為活躍。
- 每當應用程式持續存取使用者敏感的麥克風或相機,狀態列圖示就會顯示。
- 使用者可以按一下這些圖示,查看哪些應用程式正在存取麥克風、相機或兩者。
圖 1. 麥克風和相機使用中圖示,顯示正在存取 (右上角)
只要指標顯示,就表示存取權處於有效狀態。系統會先顯示圖示,然後轉換為持續顯示的圓點,直到應用程式關閉或關閉為止。
使用者開啟「快速設定」並輕觸指標時,系統會顯示對話方塊,指出應用程式是否正在使用相機、麥克風或兩者皆是。
圖 2. 使用中和近期存取指標
圖 2 中的圖片顯示,當執行中的應用程式在過去 5 秒內存取資料時,會顯示哪些活動存取指標。
最近存取指標顯示應用程式在過去 15 秒內存取了資料,但該應用程式並未處於活動狀態。對話方塊中會顯示所有正在執行的應用程式,但只有一個應用程式會顯示為最近存取資料的來源,即使在前 15 秒的時間範圍內有超過一個應用程式存取資料也一樣。直到使用者關閉通知對話方塊,存取權檢視畫面才會解凍。
提交並啟用
PermissionManager
類別提供一種方法,可填入位於系統 UI 中的對話方塊。
- 系統 UI 會回應裝置設定切換:
privacy/mic_camera_indicators_enabled
。 - 由於有兩個不同的提交載具,因此必須進行切換,依序如下:
- 提交。
- 啟用
- 如果
PermissionManager
中的函式無法提供所需資料,系統 UI 不得當機。
處理流程
權限指示器功能包含三個主要部分:
- 應用程式
- 指標 (由 SystemUI 處理)
- 判斷哪些應用程式正在使用資料
PermissionController
提供機制,可判斷哪些應用程式正在使用資料。SystemUI 會監聽使用私人資料的應用程式。SystemUI 會在頂端導覽列中顯示與所用權限相對應的圖示。PermissionController
會在使用者點選圖示時顯示使用資料。
圖 3. 系統元件和 (UI) 轉場流程
以下說明圖 3 中編號的轉換:
1- 應用程式向系統要求私人資料。
2-系統會檢查權限。如果權限已核准,系統會通知資料供應商,並在應用程式作業中記錄使用情形
3- 資料提供者將資料提供給應用程式。
4-5 使用者點選圖示。系統 UI 會向 PermissionManager
要求資料,並向使用者顯示對話方塊。
處理詳細資料
- 應用程式會使用麥克風和相機,呼叫
AppOpsManager.startOp
、stopOp
和/或noteOp
。這會在系統伺服器中建立應用程式操作記錄。 - 系統 UI 會使用
AppOpsManager.OnOpActiveChangedInternalListener
和OnOpNotedListener
監聽器,監聽新的應用程式作業。當新的使用情形出現 (透過呼叫startOp
或noteOp
) 時,系統 UI 會驗證使用情形是否來自系統應用程式。 - 如果系統 UI 驗證系統應用程式用途,且用途是麥克風,系統 UI 會檢查麥克風是否已靜音。
- 如果系統 UI 驗證非系統應用程式使用情形 (例如麥克風使用情形為麥克風已取消靜音;相機使用情形為相機已開啟),就會顯示反映該使用情形的圖示。
如果系統 UI 收到沒有時間長度的 noteOp
,則會顯示圖示至少 5 秒。否則,圖示會顯示至收到 stopOp
為止,或顯示 5 秒,以較長者為準。使用者點選圖示時,系統會啟動意圖,將其傳送至 PermissionController
,以便啟動對話方塊。
PermissionController
會載入最近所有使用麥克風和攝影機的應用程式。它會檢查是否有任何上述項目正在執行,或在系統 UI 設定的時間範圍內執行。如果找到相符項目,就會顯示使用該權限的應用程式名稱,以及應用程式使用的權限。
由於 Android 12 以上版本的這項變更,部分應用程式必須變更行為或實作特殊行為。
通訊功能必須在使用 Android Google 搜尋應用程式 (AGSA) 和 Google 行動服務 (GMS) 時,實作權限用途 (以便處理在電話通話中使用的獨立麥克風堆疊)。