自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
隱私權指標
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
Android 6 以上版本的執行階段權限可讓使用者控制何時允許系統錄製裝置麥克風的音訊或裝置相機的影片。應用程式必須先取得使用者的許可,才能開始錄製。使用者必須透過系統顯示的對話方塊,授予或拒絕應用程式權限。
Android 12 會在應用程式透過相機和麥克風的 app-op 權限使用私人資料來源時,顯示指標,讓使用者瞭解情況。應用程式作業記錄存取權,適用於執行階段權限保護的 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) 時,實作權限用途 (以便處理在電話通話中使用的獨立麥克風堆疊)。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-07-27 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-07-27 (世界標準時間)。"],[],[],null,["# Privacy indicators\n\nRuntime permissions in Android 6 and higher give users control over when they\nallow audio from a device's microphone or video from a device's camera to be\nrecorded. Before an app can record, a user must either grant or deny it\npermission through a dialog the system presents.\n\nAndroid 12 provides users with transparency by\ndisplaying indicators when an app uses a *private* data source through the cameras\nand microphone [app-op permissions](https://developer.android.com/reference/android/app/AppOpsManager#app-op-permissions).\nApp-ops record accesses to runtime permission-protected APIs.\n\nApp-op tracks both the activity status and the number of individual API calls,\nand interacts with the microphone and camera indicators in Android 12\nto show users when apps have accessed audio and camera data on their devices.\nWhen users click the microphone or camera indicators, they see which apps have\naccessed their data. This feature is mandatory for all OEMs.\n\nIndicator visibility requirements\n---------------------------------\n\nThese are the requirements for microphone and camera indicators on devices\nrunning on Android 12 or higher:\n\n- The indicators must appear in the status bar, and retain the highest visual priority (for example, located at the rightmost position in the top-right corner).\n- The indicators must be consistently located in the same position, and must not be blocked by an app when it launches.\n- Both indicators *must* be green (or a variation of green) in color.\n- Clicking one or both indicators *must* render an app attribution affordance notification that does the following:\n - Displays the name of the app that's using the microphone and (or) camera\n - Displays the name of the app which used the microphone and (or) camera within the last 15 seconds\n - Takes users to the app permission page in **Settings**\n\nUsage and features\n------------------\n\nIn Android 12, the UI distinguishes between\nrunning usages and recent usages. Usages are considered active if they're either\nmarked by the system as running, or are less than 5 seconds old.\n\n- Status bar icons show each time an app has ongoing user-sensitive microphone or camera access.\n- Users can click these icons and see which apps are accessing the microphone, the camera, or both.\n\n**Figure 1.** Microphone and camera in-use indicators showing active access (top-right corner)\n\nAccess is considered active for as long as the indicators show. An icon shows\nfirst, then transitions to a dot that persists until the app is either dismissed\nor closed.\n\nWhen a user opens Quick Settings and then taps the indicators, a dialog appears\nthat shows whether the app is using the camera, the microphone, or both.\n\n**Figure 2.** Active and recent access indicators\n\nThe image in **Figure 2** shows active access indicators when data has been\naccessed in the past 5 seconds by a running app.\n\nRecent access indicators show that data was accessed by an app during the prior\n15 seconds, but that the app isn't active. All active apps show in the\ndialogue, but only one app shows as the source of recent access, even when more\nthan 1 app accessed data within a prior 15 second time-frame. The access view\nremains frozen until the user dismisses the notification dialog.\n\n### Deliver and enable\n\nThe `PermissionManager` class provides a method to populate the dialog, which\nresides in System UI.\n\n- System UI reacts to a device configuration switch: `privacy/mic_camera_indicators_enabled`.\n- The switch is necessary because there are two separate delivery vehicles, in this order:\n 1. Deliver.\n 2. Enable.\n- The System UI must not crash if the method in `PermissionManager` can't provide the needed data.\n\nProcess flow\n------------\n\nThe Permission Indicator functionality has three main parts:\n\n- The apps\n- The indicators (handled by SystemUI)\n- A way to determine which apps are using the data\n\nThe `PermissionController` provides the mechanism to determine which apps are\nusing data. SystemUI listens for apps using private data. The SystemUI shows an\nicon in the top navigation bar that corresponds to the permissions used. The\n`PermissionController` displays data about usages when a user clicks an icon.\n\n**Figure 3.** System components and (UI) transitions flow\n\nThe numbered transitions in **Figure 3** are described below:\n\n**1-** An app requests private data from the system.\n\n**2-** The system checks permissions. If the permissions are allowed, the system\nnotifies the data provider, and notes the usage in app-ops\n\n**3-** The data provider gives data to the app.\n\n**4-5** The user clicks the icons. System UI requests data from the\n`PermissionManager` and presents the dialog to the user.\n\n### Process details\n\n1. Apps use the microphone and camera, calling`AppOpsManager.startOp`, `stopOp`, and (or) `noteOp`. This creates app-op records in the system server.\n2. The System UI listens for new app-ops using the `AppOpsManager.OnOpActiveChangedInternalListener` and `OnOpNotedListener` listeners. When a new usage comes in (through a call to either `startOp` or `noteOp`), the System UI verifies that the usage is by a system app.\n3. If System UI verifies system app usage, and if the usage is for the microphone, System UI checks if the microphone is muted.\n4. If System UI verifies non-system app usage, (and, for microphone usage, that the microphone is unmuted; for camera usage, that the camera is toggled on), it shows an icon reflecting such usage.\n\nIf System UI receives a `noteOp`, which has no duration, it shows the icon for\nat least 5 seconds. Otherwise, the icon shows either until it receives a\n`stopOp`, or for 5 seconds, whichever is longer. The user clicking an icon\ninitiates an intent that goes to the `PermissionController` to start the Dialog.\n\nThe `PermissionController` loads all recent usage for microphone and camera. It\nchecks if any of those are running, or were running within the timeframe\nset by System UI. If it finds a match, it displays the name of the app\nthat used the permission, and which permissions the app used.\n\nBecause of this change in Android 12 and higher,\nsome apps must either change their behavior or implement special behavior.\n\nTelephony must implement permission usage (to account for the separate\nmicrophone stack used in phone calls), while working with Android Google Search\napp (AGSA) and Google Mobile Services (GMS)."]]