与位置、麦克风和相机相关的权限授予您的应用访问用户特别敏感信息的权限。本页面介绍了平台中的几种机制,可帮助用户了解并控制哪些应用可以访问位置、麦克风和相机。
只要您遵循隐私最佳实践,这些保护隐私的系统功能就不会影响您的应用如何处理与位置、麦克风和相机相关的权限。
具体来说,请确保您的应用执行以下操作:
- 等到用户授予您的应用
CAMERA
权限后,再访问设备的相机。 - 等到用户授予您的应用
RECORD_AUDIO
权限后,再访问设备的麦克风。 - 在用户与您的应用中需要位置的功能进行互动之前,请勿请求
ACCESS_COARSE_LOCATION
权限或ACCESS_FINE_LOCATION
权限,具体方法请参阅有关如何请求位置权限的指南。 - 等到用户授予您的应用
ACCESS_COARSE_LOCATION
权限或ACCESS_FINE_LOCATION
权限后,再请求ACCESS_BACKGROUND_LOCATION
权限。
隐私信息中心
在运行 Android 12 或更高版本的受支持设备上,系统设置中会显示“隐私信息中心”屏幕。在此屏幕上,用户可以访问单独的屏幕,显示应用何时访问了位置、相机和麦克风信息。每个屏幕都显示不同应用访问特定类型数据的时间线。图 1 显示了位置信息的数据访问时间线。
显示数据访问理由
您的应用可以为用户提供理由,帮助他们理解您的应用为何访问位置、相机或麦克风信息。此理由可以显示在新的“隐私信息中心”屏幕、您的应用权限屏幕,或同时显示在这两个屏幕上。
要解释您的应用为何访问位置、相机和麦克风信息,请完成以下步骤:
添加一个 Activity,该 Activity 在启动时提供您的应用执行特定类型数据访问操作的理由。在此 Activity 中,将
android:permission
属性设置为START_VIEW_PERMISSION_USAGE
。如果您的应用以 Android 12 或更高版本为目标平台,您必须明确定义
android:exported
属性的值。将以下 intent 过滤器添加到新添加的 Activity 中:
<!-- 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>
决定您的数据访问理由 Activity 应显示什么。例如,您可以显示您的应用网站或帮助中心文章。要提供有关您的应用访问的数据类型以及访问发生时间更详细的解释,请处理系统在调用权限使用 intent 时包含的额外数据:
- 如果系统调用
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
的值。
- 如果系统调用
根据您添加的 intent 过滤器,用户会在某些屏幕上看到应用名称旁边显示一个信息图标:
- 如果您添加的 intent 过滤器包含
VIEW_PERMISSION_USAGE
操作,用户会在系统设置中您应用的权限页面上看到该图标。您可以将此操作应用于所有运行时权限。 - 如果您添加的 intent 过滤器包含
VIEW_PERMISSION_USAGE_FOR_PERIOD
操作,只要您的应用出现在“隐私信息中心”屏幕上,用户就会在应用名称旁边看到该图标。
当用户选择该图标时,您的应用的理由 Activity 就会启动。
指示器
在运行 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 }
切换开关
在运行 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);