电源管理
Android 9引入了一些新功能来改进设备电源管理。
从两个维度进行优化:应用使用频率及优先级、改进省电模式。
电源管理功能可以分为两个类别:
- 应用待机群组
基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级。 - 省电模式改进
- 更主动地将应用置于应用待机模式
- 所有APP都受到 后台执行限制
- 灭屏时,位置服务可能被停用
- 后台应用无法访问网络
注:这些变化适用于所有应用,无论它们是否以 Android 9 为目标。
隐私权变更
增加用户隐私。Android 9 引入了若干行为变更,如限制后台应用访问设备传感器、限制通过 Wi-Fi 扫描检索到的信息,以及与通话、手机状态和 Wi-Fi 扫描相关的新权限规则和权限组。
后台对传感器的访问受限
后台应用访问用户输入和传感器数据受限。Android 9上的App需要检测传感器事件,必须使用***前台服务***。
采取以下限制:
- 您的应用不能访问麦克风或摄像头。
- 使用连续报告模式的传感器(例如加速度计和陀螺仪)不会接收事件。
- 使用变化或一次性报告模式的传感器不会接收事件。
限制访问通话记录
Android 9 引入 CALL_LOG 权限组 并将 READ_CALL_LOG、WRITE_CALL_LOG 和 PROCESS_OUTGOING_CALLS 权限移入该组。 在之前的 Android 版本中,这些权限位于 PHONE 权限组。
如果您的应用需要访问通话记录或者需要处理去电,则您必须向 CALL_LOG 权限组明确请求这些权限
。 否则会发生 SecurityException。
注:因为这些权限已变更组并在运行时授予,用户可以拒绝您的应用访问通话记录信息
。 在这种情况下,您的应用应该能够妥善处理无法访问信息的状况。
更多信息可以查看 运行时权限最佳做法。
限制访问电话号码
未获得 READ_CALL_LOG 权限,运行于 Android 9 上的App无法读取电话号码或手机状态。
来电和去电关联的电话号码
可在手机状态广播(比如来电和去电的手机状态广播)中看到,并可通过 PhoneStateListener 类访问。 但是,如果没有 READ_CALL_LOG 权限
,则 PHONE_STATE_CHANGED 广播和 PhoneStateListener 提供的电话号码字段为空
。
要从手机状态中读取电话号码,请根据您的用例更新应用以请求必要的权限:
- 要通过 PHONE_STATE Intent 操作读取电话号码
- 同时需要 READ_CALL_LOG 权限和 READ_PHONE_STATE 权限。
- 要从 onCallStateChanged() 中读取电话号码
- 只需要 READ_CALL_LOG 权限。 不需要 READ_PHONE_STATE 权限。
限制访问 Wi-Fi 位置和连接信息
在 Android 9 中,App进行 Wi-Fi 扫描的权限要求比之前的版本更严格。 详情请参阅 Wi-Fi 扫描限制。