解释对敏感信息的访问权限

在授予应用与位置信息、麦克风和相机相关的权限后,应用可以访问关于用户的特别敏感的信息。该平台包含多种机制(如本文所述),可帮助用户及时了解和控制哪些应用可以访问位置信息、麦克风和相机。

这些隐私保护系统功能应该不会影响您的应用处理与位置信息、麦克风和相机相关的权限的方式,但前提是您遵循隐私设置最佳做法

具体来说,请确保在对应用执行相关操作时做到以下几点:

隐私信息中心

垂直时间轴显示了访问过位置信息的不同应用,以及访问发生的时间
图 1. “位置信息使用情况”屏幕,“隐私信息中心”的一部分。

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

显示数据访问的理由

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

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

  1. 添加一个 activity,它在启动后会提供某种理由,说明为什么您的应用执行特定类型的数据访问操作。在此 activity 中,将 android:permission 属性设置为 START_VIEW_PERMISSION_USAGE

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

  2. 向新添加的 activity 添加以下 intent 过滤器:

    <!-- 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 时包含的 extra:

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

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

当用户选择该图标时,系统会启动应用的理由 activity。

右上角的圆角矩形,其中包含相机图标和麦克风图标
图 2. 麦克风和摄像头指示标志,显示了最近的数据访问。

指示标志

在搭载 Android 12 或更高版本的设备上,当应用使用麦克风或相机时,图标会出现在状态栏中。如果应用处于沉浸模式,图标会出现在屏幕的右上角。用户可以打开“快捷设置”,并选择图标以查看哪些应用当前正在使用麦克风或摄像头。图 2 显示了包含图标的示例屏幕截图。

确定指示标志在屏幕上的位置

如果您的应用支持沉浸模式或全屏界面,指示标志可能会与应用界面短暂重叠。为协助应用界面适应这些指示标志,系统引入了 getPrivacyIndicatorBounds() 方法,如下方的代码段所示。利用此 API,您可以确定指示标志可能出现的边界。然后,您可能会决定以不同的布局安排屏幕界面。

Kotlin

view.setOnApplyWindowInsetsListener { view, windowInsets ->
    val indicatorBounds = windowInsets.getPrivacyIndicatorBounds()
    // change your UI to avoid overlapping
    windowInsets
}

切换开关

快捷设置图块标有“摄像头使用权限”和“麦克风使用权限”
图 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);