解释对更敏感信息的访问

与位置、麦克风和相机相关的权限授予您的应用访问用户特别敏感信息的权限。本页面介绍了平台中的几种机制,可帮助用户了解并控制哪些应用可以访问位置、麦克风和相机。

只要您遵循隐私最佳实践,这些保护隐私的系统功能就不会影响您的应用如何处理与位置、麦克风和相机相关的权限。

具体来说,请确保您的应用执行以下操作:

隐私信息中心

A vertical timeline shows the different apps that have
         accessed location information, and at what time the accesses occurred
图 1. 位置使用情况屏幕,隐私信息中心的一部分。

在运行 Android 12 或更高版本的受支持设备上,系统设置中会显示“隐私信息中心”屏幕。在此屏幕上,用户可以访问单独的屏幕,显示应用何时访问了位置、相机和麦克风信息。每个屏幕都显示不同应用访问特定类型数据的时间线。图 1 显示了位置信息的数据访问时间线。

显示数据访问理由

您的应用可以为用户提供理由,帮助他们理解您的应用为何访问位置、相机或麦克风信息。此理由可以显示在新的“隐私信息中心”屏幕、您的应用权限屏幕,或同时显示在这两个屏幕上。

要解释您的应用为何访问位置、相机和麦克风信息,请完成以下步骤:

  1. 添加一个 Activity,该 Activity 在启动时提供您的应用执行特定类型数据访问操作的理由。在此 Activity 中,将 android:permission 属性设置为 START_VIEW_PERMISSION_USAGE

    如果您的应用以 Android 12 或更高版本为目标平台,您必须明确定义 android:exported 属性的值

  2. 将以下 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>
  3. 决定您的数据访问理由 Activity 应显示什么。例如,您可以显示您的应用网站或帮助中心文章。要提供有关您的应用访问的数据类型以及访问发生时间更详细的解释,请处理系统在调用权限使用 intent 时包含的额外数据:

根据您添加的 intent 过滤器,用户会在某些屏幕上看到应用名称旁边显示一个信息图标:

  • 如果您添加的 intent 过滤器包含 VIEW_PERMISSION_USAGE 操作,用户会在系统设置中您应用的权限页面上看到该图标。您可以将此操作应用于所有运行时权限。
  • 如果您添加的 intent 过滤器包含 VIEW_PERMISSION_USAGE_FOR_PERIOD 操作,只要您的应用出现在“隐私信息中心”屏幕上,用户就会在应用名称旁边看到该图标。

当用户选择该图标时,您的应用的理由 Activity 就会启动。

A rounded rectangle in the upper-right corner, which
         includes a camera icon and a microphone icon
图 2. 麦克风和相机指示器,显示近期数据访问。

指示器

在运行 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
}

切换开关

Quick settings tiles are labeled 'Camera access' and
         'Mic access'
图 3. “快速设置”中的麦克风和相机切换开关。

在运行 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);