在 Android 6 以上版本中,執行階段權限可讓使用者控管何時允許錄製裝置麥克風的音訊或裝置相機的影片。應用程式必須先透過系統顯示的對話方塊,取得使用者的授權或拒絕,才能錄製音訊。
Android 12 會在應用程式透過相機和麥克風 app-op 權限使用私密資料來源時顯示指標,讓使用者瞭解情況。應用程式作業記錄會記錄受執行階段權限保護的 API 存取情形。
App-op 會追蹤活動狀態和個別 API 呼叫次數,並與 Android 12 中的麥克風和相機指標互動,向使用者顯示應用程式存取裝置音訊和相機資料的時間。使用者點選麥克風或相機指標時,會看到哪些應用程式存取過他們的資料。所有原始設備製造商都必須提供這項功能。
指標顯示規定
搭載 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- 系統會檢查權限。如果允許這些權限,系統會通知資料供應商,並在 app-ops 中記錄使用情況
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) 搭配運作。