位置、麥克風和相機的相關權限,可授權讓應用程式存取使用者的特定敏感資訊。本頁面說明了此平台包含的數種機制,可協助使用者掌握最新資訊,以及控管哪些應用程式能夠存取位置、麥克風和相機權限。
只要遵循隱私權最佳做法,這類保護隱私權的系統功能就不會影響應用程式處理位置、麥克風和相機等相關權限的方式。
請特別注意,請務必在應用程式中完成以下操作:
- 請等到使用者授予應用程式
CAMERA
權限,方可存取裝置的相機。 - 請到使用者授予應用程式
RECORD_AUDIO
權限,方可存取裝置的麥克風。 - 等到使用者與應用程式中需要位置資訊的功能互動後,再要求
ACCESS_COARSE_LOCATION
或ACCESS_FINE_LOCATION
權限。步驟說明請參閱「要求位置存取權」。 - 等到使用者向您的應用程式授予
ACCESS_COARSE_LOCATION
權限或ACCESS_FINE_LOCATION
權限後,再要求ACCESS_BACKGROUND_LOCATION
權限。
隱私資訊主頁
在支援 Android 12 或以上版本的裝置上,系統設定會顯示「隱私權資訊主頁」畫面。在這畫面,使用者可以透過個別存取其畫面,看到應用程式存取位置、相機和麥克風的資訊。每個畫面都會顯示不同應用程式各自存取特定類型資料的時間軸。圖 1 顯示位置資訊的資料存取時間軸。
顯示資料存取的理由
您的應用程式可以為使用者提供基本理由,並協助他們瞭解應用程式存取位置、相機或麥克風資訊的原因。原因可能會顯示在新版「隱私資訊主頁」畫面、應用程式的權限頁面,或是兩處一併顯示。
如要瞭解應用程式存取位置、相機和麥克風資訊的原因,請完成下列步驟:
新增活動時,要說明應用程式存取特定資料的原因。在這個活動中,將
android:permission
屬性設為START_VIEW_PERMISSION_USAGE
。如果您的應用程式指定 Android 12 或以上的版本,您必須明確定義
android:exported
的屬性。將下列意圖篩選器加入新建立的活動:
<!-- android:exported required if you target Android 12. --> <activity android:name=".DataAccessRationaleActivity" android:permission="android.permission.START_VIEW_PERMISSION_USAGE" android:exported="true"> <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on your app permission's page in system settings. VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information icon on the Privacy Dashboard screen. --> <intent-filter> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" /> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" /> <category android:name="android.intent.category.DEFAULT" /> ... </intent-filter> </activity>
決定要顯示哪種資料存取權的理由。舉例來說,您可能會顯示應用程式網站或說明中心文章。如要詳細說明您應用程式存取的資料類型與時機,請處理系統在叫用權限使用意圖時使用的 extra 資料:
- 如果系統叫用
ACTION_VIEW_PERMISSION_USAGE
,應用程式就能擷取EXTRA_PERMISSION_GROUP_NAME
的值。 - 如果系統叫用
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
,應用程式就能擷取EXTRA_PERMISSION_GROUP_NAME
、EXTRA_ATTRIBUTION_TAGS
和EXTRA_START_TIME
和EXTRA_END_TIME
的值。
- 如果系統叫用
視您新增的意圖篩選器而定,使用者會在特定螢幕畫面上,您的應用程式名稱旁看到資訊圖示。
- 如果您新增的意圖篩選器包含
VIEW_PERMISSION_USAGE
動作,使用者會在系統設定中的應用程式權限頁面上看到該圖示。您可以將該動作套用至所有執行階段權限。 - 如果您新增的意圖篩選器包含
VIEW_PERMISSION_USAGE_FOR_PERIOD
動作,只要您的應用程式出現在「隱私權資訊主頁」畫面,使用者就會在應用程式名稱旁看到該圖示。
使用者選取該圖示後,系統就會啟動應用程式的解釋。
指標
若是搭載 Android 12 以上版本的裝置,當應用程式存取麥克風或相機,狀態列中會顯示相應圖示。如果是在沈浸模式中,應用程式圖示會出現在畫面右上角。使用者可以開啟「快速設定」並選取圖示,查看目前正在使用麥克風或相機的應用程式。圖 2 顯示含有圖示的螢幕截圖。
找出指標所在的畫面位置
如果您的應用程式支援沈浸模式或全螢幕 UI,指標可能會與應用程式的 UI 暫時重疊。為協助將您的 UI 調整這些指標,系統會導入 getPrivacyIndicatorBounds()
,下列為程式碼片段示範。用這個 API 可辨別指標可能顯示的範圍。接著,您便可以決定以不同的方式組織規劃 UI 畫面。
Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
Toggles
如果是搭載 Android 12 以上版本的支援裝置,使用者只要按下一個快速停用鈕,即可啟用或停用裝置上所有應用程式的相機和麥克風存取權。使用者可以透過「快速設定」 (如圖 3 或系統設定中的「隱私」畫面) 切換開關選項。
攝影機和麥克風的切換按鈕會影響裝置上所有的應用程式:
- 使用者關閉攝影機存取權時,應用程式會接收空白畫面。
使用者關閉麥克風存取權後,應用程式就會收到靜音。此外,無論您是否宣告
HIGH_SAMPLING_RATE_SENSORS
權限,動作感測器都有頻率限制。
如果使用者關閉攝影機或麥克風的存取權,然後開啟需要存取攝影機或麥克風資訊的應用程式,系統會提醒使用者,裝置的快速切換鈕為關閉狀態。
查看裝置支援
如要檢查裝置是否支援麥克風和相機開關,請新增以下程式碼片段的邏輯:
Kotlin
val sensorPrivacyManager = applicationContext .getSystemService(SensorPrivacyManager::class.java) as SensorPrivacyManager val supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE) val supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA)
Java
SensorPrivacyManager sensorPrivacyManager = getApplicationContext() .getSystemService(SensorPrivacyManager.class); boolean supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE); boolean supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA);