Android 6 以上版本的執行階段權限可讓使用者控制何時允許系統從裝置麥克風或裝置攝影機錄製音訊。應用程式必須先取得使用者的許可,才能開始錄製。使用者必須透過系統顯示的對話方塊,授予或拒絕應用程式權限。
當應用程式透過相機和麥克風的應用程式操作權限使用私人資料來源時,Android 12 會顯示指標,為使用者提供公開透明的資訊。App-ops 會記錄對執行階段權限保護 API 的存取權。
App-op 會追蹤活動狀態和個別 API 呼叫的數量,並與 Android 12 中的麥克風和相機指標互動,向使用者顯示應用程式何時在裝置上存取音訊和相機資料。使用者點選麥克風或相機圖示時,會看到哪些應用程式存取了他們的資料。所有原始設備製造商 (OEM) 都必須提供這項功能。
指標顯示規定
以下是 Android 12 以上版本裝置的麥克風和相機指示燈相關規定:
- 指標必須顯示在狀態列中,且維持最高的視覺優先順序 (例如位於右上角的位置最右側)。
- 指標必須一律位於相同位置,且不得在應用程式啟動時遭到阻擋。
- 兩個指標的顏色必須是綠色 (或綠色的變化)。
- 點選一個或兩個指標時,必須顯示應用程式歸屬資訊可用性通知,並執行下列操作:
- 顯示正在使用麥克風和/或相機的應用程式名稱
- 顯示過去 15 秒內使用麥克風和/或相機的應用程式名稱
- 將使用者帶往「設定」中的應用程式權限頁面
使用方式與功能
在 Android 12 中,UI 會區分執行中用量和最近的使用情況。如果系統將用途標示為正在執行,或是用途的時間小於 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) 搭配運作時,實作權限用途 (以便處理在電話通話中使用的獨立麥克風堆疊)。