Android 会显示以下类型的隐私权指示标志,从而使用户知晓相关情况:
摄像头和麦克风访问权限。如果应用利用摄像头和麦克风的应用操作权限使用 私人数据源,系统会显示指示标志。 如需了解相关的 CDD 要求,请参阅 2.2.5. 安全模型。
位置信息访问权限。如果应用访问设备的位置信息,系统会显示指示标志。如需了解相关的 CDD 要求,请参阅 9.8.8. 位置信息。
用户可以点按指示标志,查看哪些应用访问了其数据。
有效和近期使用情况
Android 界面会区分“正在运行”的使用情况和“近期”使用情况:
在 Android 17 或更高版本中,如果位置信息使用情况被系统标记为“正在运行”或使用时间少于 10 秒,则会被视为“有效”。对于位置信息圆点,如果 非系统应用在前台状态下运行,则访问权限会被视为有效。
在 Android 12 或更高版本中,如果麦克风和摄像头使用情况被系统标记为“正在运行”或使用时间少于 5 秒,则会被视为“有效”。
每当应用具有用户敏感的麦克风、摄像头或位置信息访问权限时,就会显示状态栏图标。用户可以点按这些图标,查看哪些应用正在访问麦克风、摄像头、位置信息或这些项的组合。 以下是使用中指示标志的示例:
图 1. 使用中指示标志表明访问权限有效(右上角)。
只要指标标志显示,访问权限就会被视为有效。系统会先显示一个图标,然后将其转换为一个圆点,该圆点会一直存在,直到应用被关闭或关闭。当用户打开“快捷设置”并点按指示标志时,系统会显示一个对话框,其中显示应用是否正在使用麦克风、摄像头、位置信息或这些项的组合。
图 2 说明了当运行的应用在有效时间窗口内访问数据时,有效访问权限指示标志的显示情况。
图 2. 有效和近期访问权限指示标志。
近期访问权限指示标志表明,应用在之前的 15 秒(或位置信息数据为 20 秒)内访问了数据,但该应用处于非活跃状态。对话框中会显示所有活跃应用,但即使在之前的 15 秒或 20 秒内有多个应用访问了数据,也只会显示一个应用作为近期访问权限的来源。对话框中会显示在有效或近期时间窗口内访问了位置信息数据的所有应用。除非用户关闭通知对话框,否则访问权限视图将保持不变。
投放并启用
PermissionManager 类提供了一种用于填充对话框(位于系统界面中)的方法。系统界面会对设备配置开关 privacy/mic_camera_indicators_enabled 做出反应;这种切换是必要的,因为有两辆单独的送货车辆,按以下顺序排列:(1) 投放,然后 (2) 启用。
处理流程
权限指示标志功能有三个主要部分:
- 应用
- 指示标志(由系统界面处理)
- 确定哪些应用正在使用数据的方式
PermissionController 提供了一种机制来确定哪些应用正在使用数据。系统界面会监听使用私人数据的应用。系统界面会在顶部导航栏中显示与所用权限对应的图标。当用户点击图标时,PermissionController 会显示有关使用情况的数据。
图 3. 系统组件和(界面)转换流程。
1 应用向系统请求私人数据。
2 系统会检查权限。如果授予相应权限,系统会通知数据提供程序,并在应用操作中记录使用情况。
3 数据提供方会向应用提供数据。
4-5 用户点击图标。系统界面从
PermissionManager请求数据,并向用户呈现对话框。
处理详情
应用操作会记录对受运行时权限保护的 API 的访问,跟踪 activity 状态和单个 API 调用的次数,并与摄像头、麦克风和指示标志交互,从而在应用访问用户设备上的音频和摄像头数据时提醒用户。
应用通过调用
AppOpsManager.startOp、stopOp或noteOp来使用麦克风、摄像头或位置信息。这将在系统服务器中创建应用操作记录。在 17 及更高版本中,位置信息指示标志也会使用这些应用操作记录。系统界面使用
AppOpsManager.OnOpActiveChangedInternalListener和OnOpNotedListener监听器监听新的应用操作。出现新的用法(通过调用startOp或noteOp)时,系统界面会验证使用情况是否是通过系统应用:如果系统界面验证了系统应用的使用情况,并且如果需要验证麦克风的使用情况,则系统界面会检查麦克风是否已静音。
如果系统界面验证非系统应用的使用情况(对于麦克风使用情况,麦克风未静音;对于摄像头使用情况,摄像头已开启),则会显示代表此类使用情况的图标。
如果系统界面验证非系统应用的使用情况,则会显示代表此类使用情况的图标,前提是相关开关处于活跃状态:
- 对于麦克风:麦克风未静音。
- 对于摄像头:摄像头已开启。
- 对于位置信息:应用在前台状态下运行。
如果系统界面收到未设置时长的 noteOp,则会显示图标至少 5 秒(位置信息为 10 秒)。否则,此图标会显示,直到接收 stopOp 或显示 5 秒或 10 秒(以较短者为准)。用户点击图标会启动一个 intent,该 intent 会转到 PermissionController 以启动对话框。
PermissionController 会加载麦克风、摄像头和位置信息的所有近期使用情况。它会检查其中任何一个是否正在运行,或是否正在系统界面所设置的时间范围内运行(麦克风或摄像头为 15 秒,位置信息为 20 秒)。如果找到匹配项,它会显示应用名称和所用权限。
在使用 Android Google 搜索应用 (AGSA) 和 GMS 时,Telephony 必须实现权限使用情况(以便将致电中单独的麦克风堆栈考虑在内)。