Android13 新特性和开发适配须知

2023-05-16

前言

目前 Google 已经发布了 Android 13 的正式版,虽然国内的手机能用上 Android 13 还有一段时间,不过开发者们可以通过模拟器来体验,那么我们来看看 Android 13 都有哪些重要的改变,我们适配的话需要做哪些工作?

新功能和 API

先来看看 Android 13 带来了哪些新的改变,这里我挑了一些对我们比较重要的来说。具体可以参考: https://developer.android.google.cn/about/versions/13/features

带主题的应用图标

让应用图标随着主题换色。

首先应用要提供自适应图标和单色应用图标,并通过清单中的 <adaptive-icon> 元素指向该单色应用图标。

然后需要用户在系统设置中启用带主题的应用图标。

这样系统会根据壁纸和主题来确定色调颜色,然后该颜色将应用于单色应用图标。

剪贴板预览

从 Android 13 开始,将内容添加到剪贴板时,我们可以预览复制的内容。如下: 

Android 13 也加入了对剪贴板敏感内容的脱敏处理,后面会详细说。

提高了启动画面效率

Android 12 引入了 Splash Screen API,可以帮助开发者更好的开发启动页面,果不其然 Android 13 就进行了完善,包括下面两项改动:

  • 系统会直接从 AnimatedVectorDrawable 推断动画时长。在 Android 13 之前,必须直接设置 windowSplashScreenAnimationDuration;

  • 使用新的 windowSplashScreenBehavior 属性可以更好地控制应用是否始终在 Android 13 及更高版本中的启动画面上显示该图标。

广播接收

在以前任何应用都可以向动态注册的接收器发送不受保护的广播,除非该接收器受签名权限的保护。Android 13 允许用户指定是否接受外部应用的广播,前提是启用了DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 兼容性框架 (默认是关闭的)。

在注册广播的时候设置一个 Flag,如下:

context.registerReceiver(sharedBroadcastReceiver, intentFilter,RECEIVER_EXPORTED)
context.registerReceiver(privateBroadcastReceiver, intentFilter,RECEIVER_NOT_EXPORTED)

注意: 如果启用了 DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED,在注册广播的时候就必须设置 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED。

照片选择器

Android 13 提供了照片选择器,这样无需向应用授予整个媒体库的访问权限。

使用照片选择器需要 1.6.0-alpha05 或更高版本的 androidx.activity 库,主要 API: 

  • PickVisualMedia,用于选择单张图片或单个视频。

  • PickMultipleVisualMedia,用于选择多张图片或多个视频。

示例代码如下: 

val pickMedia = registerForActivityResult(PickVisualMedia()) { uri ->    if (uri != null) {        Log.d("PhotoPicker", "Selected URI: $uri")    } else {        Log.d("PhotoPicker", "No media selected")    }}
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly))
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))
val mimeType = "image/gif"pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType(mimeType)))

附近 WIFI 设备新权限

Android 13 之前针对 WIFI 的权限是 ACCESS_FINE_LOCATION,即使我们不想定位只想查询一下附近的 WIFI。Android 13 提供了一个新的运行时权限 NEARBY_WIFI_DEVICES 来专门针对这种情况,这个权限影响的 API 如下: 

WifiManager

  startLocalOnlyHotspot()

WifiAwareManager

  attach()

WifiAwareSession

  publish()

  subscribe()

WifiP2pManager

  addLocalService()

  connect()

  createGroup()

  discoverPeers()

  discoverServices()

  requestDeviceInfo()

  requestGroupInfo()

  requestPeers()

WifiRttManager

  startRanging()

使用以上 API 需要申请 NEARBY_WIFI_DEVICES 权限。

精确闹钟权限

Android 13 提供了一个新的闹钟权限 USE_EXACT_ALARM,它类似于 SCHEDULE_EXACT_ALARM 不过是自动授权的,不需要用户手动授权。

Google 对这个权限的要求是必须是闹钟、计时器或提供活动通知的日历应用才可以使用,Google Play 会对使用这个权限的应用进行审核。不过目前国内还没有限制,后续各大应用市场应该也会跟进限制。

适配 Android 13

下面来看看适配 Android 13 需要注意哪些事项。这里只列举一些比较常用的功能,全部内容可以参考:

https://developer.android.google.cn/about/versions/13/behavior-changes-all

通知的运行时权限

Android 13 (API 级别 33) 引入了运行时通知权限 POST_NOTIFICATIONS,如果应用以 Android 13 为目标平台,当需要发送通知的时候就需要动态请求该权限,否则无法发出通知。

注意: 媒体相关的通知不受这个权限的影响,依然可以正常进行通知;前台服务的通知则受本权限影响。

可以通过 NotificationManager 的 areNotificationsEnabled() 来检查应用是否可以发送通知。

剪切板脱敏

上面我们提到 Android 13 提供了剪切板预览功能,但是如果复制的是敏感内容的话,可以在调用 ClipboardManager#setPrimaryClip() 之前向 ClipData 的 ClipDescription 添加一个标志,这样预览的时候就看不到敏感内容了。

代码如下:

// When your app targets API level 33 or higherclipData.apply {    description.extras = PersistableBundle().apply {        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)    }}
// If your app targets a lower API levelclipData.apply {    description.extras = PersistableBundle().apply {        putBoolean("android.content.extra.IS_SENSITIVE", true)    }}

添加标志后的效果如下:

附近 WIFI 设备新权限

上面提到了,针对附近 WIFI 设备提供了一个新的运行时权限 NEARBY_WIFI_DEVICES。

如果应用不会使用 WIFI 相关 API 进行定位,那么可以将 android:usesPermissionFlags 属性设置为 neverForLocation:

<manifest ...>     <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"                     android:usesPermissionFlags="neverForLocation" />     <application ...>        ...    </application></manifest>

因为 NEARBY_WIFI_DEVICES 只在 Android 13 上,所以我们还要保留 ACCESS_FINE_LOCATION 以应对 Android 12 及以下设备,不过可以为其设置最高 SDK 版本,如下: 

<manifest ...>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"                     android:maxSdkVersion="32" />     <application ...>        ...    </application></manifest>

细化媒体权限

如果应用以 Android 13 为目标平台,那么如果要访问媒体文件时就不能像之前那样请求 READ_EXTERNAL_STORAGE 权限,Android 13 提供了更加细化的权限,必须请求以下权限来代替:

媒体类型

请求权限

图片和照片

READ_MEDIA_IMAGES
视频READ_MEDIA_VIDEO
音频文件READ_MEDIA_AUDIO

这样可以更加保护用户的隐私。

如果同时请求 READ_MEDIA_IMAGES 权限和 READ_MEDIA_VIDEO 权限,只会显示一个系统权限对话框。

注意: 如果您的应用只需要访问图片、照片和视频,请考虑使用照片选择器,而不是声明 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 权限。

后台使用身体传感器的新权限

如果应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,还需要声明新的  BODY_SENSORS_BACKGROUND 权限。

总结

以上就是 Android 13 版本中对开发者来说比较关心的新功能和适配方案,如果想了解更全面的信息,可以参考官方网站:

https://developer.android.google.cn/about/versions/13

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android13 新特性和开发适配须知 的相关文章

  • OKR研发管理工具

    OKR是一种目标管理的工具和方法 xff0c 目前在互联网公司中被广泛应用 接下来 xff0c 我就从以下 6 方面对OKR进行拆解 xff1a OKR是什么 xff1f OKR起源OKR五大特点如何制定OKR xff1f OKR如何在团队
  • 车载监控平台(VIMS)介绍

    一 概述 VIMS 作为车辆的眼睛 xff0c 可直接观察车内用户的行为 xff0c 从而推断用户的需求 xff0c 借此可辅助其他产品 xff0c 如语音 导航 场景引擎等 xff0c 为提供用户贴心 周到的服 务 VIMS 包括 DMS
  • 智能驾驶汽车之自动泊车发展阶段

    一 背景介绍 xff1a 早期的自动泊车系统 xff0c 属于ADAS范畴 xff0c 就是我们常说的倒车雷达 xff0c 通过超声波雷达和360环视摄像头等传感器 xff0c 来辅助驾驶员进行泊车 xff0c 通过滴滴滴的提示音 xff0
  • ANDROID系统5层系统架构

    Android 是一套基于linux内核的开源系统 xff0c 主要应用于移动端 xff0c 在移动互联网时代 xff0c 应运而生 下面主要介绍一下整个Android 的5层系统架构 xff0c 如图自上而下 xff08 高层到底层 xf
  • 耳机降噪功能(ANC、ENC、CVC、DSP)

    被动式降噪也称物理降噪 xff0c 被动式降噪是指利用物理特性将外部噪声与耳朵隔绝开 xff0c 主要通过耳机的头梁设计得紧一些 耳罩腔体进行声学优化 耳罩内部放上吸声材料 等等来实现耳机的物理隔音 被动降噪对高频率声音 xff08 如人声
  • 智能化汽车3D ToF摄像头

    理想L9 xff08 理想ONE之后的第二款车 xff09 将搭载3D ToF传感器 xff0c 除了驾驶员眼睛注视和头部跟踪监控 xff0c 还将作为理想自研的深度学习 43 多模态三维空间交互技术的主要硬件载体 而此前 xff0c 大部
  • 汽车驾驶自动化分级L1~L5

    在 汽车驾驶自动化分级 里面 xff0c 自动驾驶的标准称呼是 驾驶自动化 xff0c 指车辆以自动的方式持续地执行部分或全部动态驾驶任务的行为 自动驾驶级别分级 基于驾驶自动化系统能够执行动态驾驶任务的程度 xff0c 驾驶自动化分成 0
  • 质量管理五大工具详解

    1 统计过程控制 xff08 SPC xff0c Statistical Process Control xff09 xff1b Statistical Process Control 是一种制造控制方法 xff0c 是将制造中的控制项目
  • 用pyinstaller打包python遇到的坑

    最近写了一个小程序 xff0c 用到了pandas xff0c matplotlib模块 xff0c 打包时出现各种问题 xff0c 总结下走过的坑 因为之前使用openpyxl写过一个更简单的程序 xff0c 仅用来读写excel xff
  • 8D报告组成部分

    8D问题解决法 xff08 Eight Disciplines Problem Solving xff0c 缩写 xff1a 8D xff09 也称为团队导向问题解决方法或8D report xff0c 是一个处理及解决问题的方法 xff0
  • 高通cDSP介绍汇总

    Qualcomm Hexagon Compute DSP cDSP 是高通平台上专门用来做通用计算的硬件加速单元 xff0c 与主机 CPU 相比 xff0c DSP 通常以较低的时钟速度运行 xff0c 并提供更多的并行指令级 这使得 D

随机推荐

  • PCB拼板方式

    Pcb拼板方式一般有三种 xff1a V割 V CUT 邮票孔以和空心连接条 PCB拼板方式 V割 V割 xff0c 又称V CUT xff0c 在规则板中使用较多 V割是在两个板子的连接处画一个槽 xff0c 只要将两个板子拼在一起 xf
  • 车联网名词缩写含义

    TSP xff1a Telematics Service Provider xff1b DSRC xff1a 专用短程通信技术是一种新型的技术 xff0c Dedicated Short RangeCommunication DSRC xf
  • 质量管理PPAP说明

    PPAP是英文Production Part Approval Process的缩写 xff0c 中文翻译为生产件批准程序 PPAP是TS16949质量管理体系五大工具之一 xff0c 用于汽车整车或零部件生产过程的质量管控 各种质量管理类
  • Vlookup最经典的10种用法

    该函数的语法规则如下 xff1a VLOOKUP lookup value table array col index num range lookup 参数 简单说明 输入数据类型 lookup value 要查找的值 数值 引用或文本字
  • 宝马项目化流程标准(BMW ABC flyer requirement)

    ABC flyer BMWQMT build phase requirement 宝马的项目流程标准叫做ABC flyer 也叫QMT build phase requirement 为什么叫这么名字 xff0c 是因为宝马项目的产品零件分
  • 数字无线广播(DAB、DRM)

    1 什么是数字广播 数字化技术指的是运用0和1两位数字编码 xff0c 通过电子计算机 光缆 通信卫星等设备 xff0c 来表达 传输和处理所有信息的技术 数字化技术一般包括 数字编码 数字压缩 数字传输 数字调制 与解调 等技术 所谓的数
  • 什么是IPD管理体系?

    集成产品开发 xff08 Integrated Product Development 简称IPD xff09 是一套产品开发的模式 理念与方法 源于美国PRTM公司出版的 产品及生命周期优化法 一书 最具有代表实践者有IBM和华为 IPD
  • 全球整车开发流程(GVDP)

    整车开发流程用于整车开发的管理控制 xff0c 其中换代开发 换型开发 年度改型开发和变型开发可以根据所开发产品的特点或资源环境需求 产品开发流程图 产品开发参考周期 如下 xff1a 1 平台项目 开发全新的车型平台 xff0c 采用全新
  • DataFrame 切片取值

    基本格式 xff1a dataframe 列名 1 取多列 列名要用中括号括起来 xff0c 所以下述命令 dataframe P4 profit rate P3PS P3NS 没问题 返回pandas core frame DataFra
  • APQP(advanced product quality planning先期产品质量策划)

    APQP xff08 advanced product quality planning先期产品质量策划 xff09 xff0c 圈子里面无论是做研发 做项目还是做SQE的都不陌生 xff0c 很多时候 xff0c 尤其是SQE会比较困惑
  • 8D和A3报告

    8D和3A报告 xff0c 他们都不仅仅是记录问题的一种文书 xff0c 而是解决问题的工具 A3发展于TPS xff08 Toyota Production system xff09 xff0c 可以用来解决问题 xff0c 沟通 xff
  • Ubuntu出现包依赖错误的解决方法

    大家在使用apt get安装软件时经常会出现这种包依赖错误 这主要是因为apt get的源中没有所要安装的package的依赖包 主要有以下两种解决方案 xff1a xff11 将CD加入Ubuntu的apt get源 参见我的另一篇博客
  • stm32 类型转换

    stm32怎么把uint8 t类型转换成int类型 可以使用强制类型转换 xff1a int n 61 int uint8 t 参考例子 xff1a include lt stdio h gt int main void uint8 t a
  • C语言不带头结点链表创建,删除,插入总结

    一 创建链表 1 第一种创建链表的方法 xff0c 注意对比和第二种创建链表的细微之处 xff0c typedef struct mynode int num float score struct mynode next Node Pnod
  • http协议基本认证 Authorization

    http协议是无状态的 xff0c 浏览器和web服务器之间可以通过cookie来身份识别 桌面应用程序 比如新浪桌面客户端 xff0c skydrive客户端 跟Web服务器之间是如何身份识别呢 xff1f 阅读目录 什么是HTTP基本认
  • Java 中大小端 int 与 byte 数组转换

    1 小端模式转换 1 1 int 转 byte 数组 xff0c 低位在前 xff0c 高位在后 将int数值转换为占四个字节的byte数组 xff0c 本方法适用于 低位在前 xff0c 高位在后 的顺序 和bytesToInt xff0
  • 无人机/FPV穿越机航模的遥控器/接收机等配件厂商

    本人最近迷恋上了穿越机 整理一些资料 xff0c 方便后来人学习 有其他更新资料 xff0c 欢迎留言 xff0c 争取打造成好的工具书 新手入门可以看百科 xff1a http wiki fpvbang com 穿越机电子系统表 xff1
  • FPV穿越机一启动就加速翻滚(死亡翻滚)解决办法

    最近不是开始入坑穿越机吗 xff0c 买了一个moblite7玩玩 xff0c 碰到了这个问题 大家在购买其他穿越机 xff0c 或者自组穿越机 xff0c 还有重置了穿越机的设置好 也很有可能碰到问题 xff0c 我把自己搜索并解决这个问
  • Python读取Microsoft Access Database

    公司有一个小零件进出库管理系统 xff0c 数据库是使用Microsoft Access Database xff0c 因长期存储会有生锈问题 xff0c 导致零件报废 因此基于原数据的进库出库在库数据 xff0c 做一个python脚本
  • Android13 新特性和开发适配须知

    前言 目前 Google 已经发布了 Android 13 的正式版 xff0c 虽然国内的手机能用上 Android 13 还有一段时间 xff0c 不过开发者们可以通过模拟器来体验 xff0c 那么我们来看看 Android 13 都有