新特性
安全和隐私
- 发送通知权限
- 读取媒体文件权限
- 附近WI-FI设备权限
- 更安全地导出上下文注册的接收器
- 剪贴板擦除
- …………
系统优化
- 前台服务任务管理器
- 电池资源利用率
新功能和API
- 照片选择器和API
- Open JDK 11
- Programmable Shaders
- 快捷设置API
- ActivityEmbedding
发送通知权限
加强通知的管控,打开必须询问。Android13的通知访问会根据正在运行的应用程序的目标API级别进行不同程度的处理。
通知将加入动态权限。
PermissionManagerService#checkPostNotificationsPermissionGrantedOrLegacyAcces
读取媒体文件权限
对于目标版本为Android13的情况,细化READ_EXTERNAL_STORAGE权限
将READ_EXTERNAL_STORAGE细化为3个权限
- READ_MEDIA_IMAGES
- READ_MEDIA_VIDEO
- READ_MEDIA_AUDIO
应用如果已经获得READ_EXTERNAL_STORAGE权限,则无需再次申请
目标为Android13的APP如果需要访问由其他APP创建的媒体文件,必须满足以下条件之一
- 已经获得READ_MEDIA_IMAGAS权限,可以访问MediaStore.Images媒体集合中的文件
- 已经获得READ_MEDIA_VIDEO权限,可以访问MediaStore.Video媒体集合中的文件
- 已经获得READ_MEDIA_AUDIO权限,可以访问MediaStore.Audio媒体集合中的文件
如果同时申请READ_MEDIA_IMAGES,READ_MEDIA_VIDEO或READ_MEDIA_AUDIO,只会有一次提示框
附近的WI-FI设备权限
由于可以通过跟踪附近的WI-FI和蓝牙设备来推断设备的位置,Google决定禁止应用程序访问蓝牙或者WI-FI的扫描结果,除非这些应用拥有位置权限。
在Android13中,WI-FI的扫描与位置权限分离。添加NEARBY_WIFI_DEVICES运行时权限。
需要新权限NEARBY_WIFI_DEVICES的相关API
- WifiManager: startLocalOnlyHotspot()
- WifiAwareManager: attach()
- WifiAwareSession: publish(), subscribe()
- WifiP2pManager: addLocalSevice(), connect(), createGroup(), discoverPeers(), discoverServices(), requestDeviceInfo(), requestGroupInfo(), requestPeers()
- WifiRttManager: startRanging()
仍需要位置信息权限(ACCESS_FINE_LOCATION)的API
- WifiManager: getScanResults(), startScan()
更安全地导出上下文注册接收器
目标为Android13的APP,必须为每个广播接收器指定RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED,否则,当注册广播接收器时候,系统会抛出SecurityException
涉及API:
- context.registerReciver(receiver, intentFilter, flag)
第三个参数flag需要传入RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED
其他权限-剪贴板自动清除功能
Android13增加了剪贴板自动清除功能,在经过设定的时间后,将自动从全局的剪贴板中清除。
每次执行复制/读取(写入剪贴板setPrimaryClip,读取 getPrimaryClip)时候,会重置一个消息,60分钟后,自动清除剪贴板内存中的内容。
即60分钟内,如果一直没有写入剪贴板的操作,剪贴板内容将被自动清除,此时粘贴功能失效。
其他权限-部分通讯接口降级
新增权限READ_BASIC_PHONE_STATE,放开一些APK必须的READ_PHONE_STATE这个危险权限。
允许以非危险权限只读访问手机状态,包括网络类型,软件版本等信息。
- getDeviceSoftwareVersion()
- getDataNetworkType()
- getVoiceNetworkType()
- isDataEnabled()
- …………
原来的READ_PHONE_STATE依然生效
限制Legacy apps可以下载文件到其他应用的私有目录
加强通过下载服务将文件下载到其他应用私有目录的限制
变更:
在Android13上,无法通过下载服务下载文件到其他应用私有目录
在Android13之前,如果是legacyMode的应用,并且具备WRITE_EXTERNAL_STORAGE权限,是可以下载的。
应用使用DownloadProvider,不可访问其他应用的external私有目录,如/storage/emulated/0/Android/data(obb)/com.xxx.xxx/
电池利用率
Android13推出以下电池保护措施
更新了系统何时将你的应用程序放入受限应用程序备用存储桶的规则
- 用户有8天没有于你的应用互动,如果用户与另一个绑定到你的应用服务互动,系统也会将你的应用视为使用过
- 你的应用在24小时内调用了过多的广播或绑定操作
- 你的应用在24小时内消耗了大量的设备电量
当用户将应用程序置于后台电池使用的受限状态时,应用程序执行受到限制
- 无法启动前台服务
- 现有前台服务会被移除
- 不会触发Alarm
- 不会job作业
- Android13为目标平台时,除非应用因其他原因启动,否则不会传送系统广播BOOT_COMPLETED,LOCKED_BOOT_COMPLETED
新的系统通知,提醒用户后台电池过度使用和长期运行的前台服务
- Android13引入了一个新的系统通知,当你的应用在24小时内消耗了大量设备电量,就会显示该通知。
豁免:
存在以下情况的应用不会受到Android13中省电措施影响:
- 系统应用与系统绑定应用
- 设备配套应用
- 处于演示模式的设备上的应用
- 设备所有者应用
- 资料所有者应用
- 常驻应用
- VPN应用
- 具有ROLE_DIALER角色的应用
- 用户在系统中明确指定了无限制功能的应用
在以下情况下,你的应用免于进入受限情况,并可以绕过8天无活动触发器:
- 具有活跃的Widget
- 至少被授予以下一种权限:SCHEDULE_EXACT_ALARM,ACCESS_BACKGROUND_LOCATION
前台服务任务管理器FGS
豁免:
以下情况不会显示在FGS中:
- 系统应用
- 安全应用,具有ROLE_EMERGENCY角色的应用
- 处于演示模式的设备上的应用
不能被用户停止,但是会显示在FGS中,但应用名称旁边没有可以按的停止按钮:
- 设备所有者应用
- 资料所有者应用
- 常驻应用
- 具有ROLE_DIALER角色的应用