android13适配指南

author author     2023-04-02     266

关键词:

参考技术A

2022 的Google I/O 发布了 Android 13 beta 2 和 Android 13 Beta 1 国内厂商的设备支持列表,虽然按照惯例, Android 13 应该是年末才发布正式版,但是相信有的开发者已经收到了平台的 Android13 的适配要求,所以本篇也是结合 Oppo 的 Android 13 应用兼容性适配指导 和官方提供的一些文档内容做一个整理测试。

目前 Android 13 主要的兼容问题还是在于隐私权限上,所以本次的适配指南相关内容也是着重在这一部分, 这里涉及面比较广的应该就是相册和通知权限

这个动图大家可能看到过, 这是 Android 13 上提供的系统图片选择器,通过 Intent(MediaStore.ACTION_PICK_IMAGES); 就可以打开,支持视频、音频、图片分类,支持多选和单选 ,另外官方也表示过,这个特性不仅仅会在 Android 13 中出现,谷歌还会将其放置到 Play 商店中,向 Android 11 和 Android 12 设备推送。

我们通过调整 TargetSDK 设置为 PreView ,然后运行到 Tiramisu 的模拟器上进行测试,主要测试 TargetSDK 在低于 "Tiramisu" 和等于 "Tiramisu" 时的不同情况。

如下图所示:

总结: 所以如果是 TargetSDK 在 Android 13 以下,不需要处理,如果在 Android 13 以及以上 ,需要增加申请权限

在 Android R 上设置里开始支持在设置里对应用的通知权限进行管理,但是应用自身是无法修改应用级别的通知权限,所以 App 无法知道自身有没有发送通知的权限

所以在 Android 13 里增加了通知的运行时权限 ,其中 Android 13 (33) 的通知会根据正在运行的应用程序的目标 API 级别进行不同的处理, 不过不管应用程序的目标API级别如何,Android 13 都会提示用户授予应用程序发送通知的权限

例如下图,是 targetSdk 30 运行在 Android 13 模拟器上,依然会弹出让用户是否允许推送

当然,系统也会根据应用程序的目标 API 级别处理通知访问:

如果是 现有应用更新 ,程序的目标 API 级别为:

最后测试和总结一下:

由于 Android 之前可以通过跟踪附近的 Wi-Fi AP 和蓝牙设备来推断设备的位置,所以这次谷歌决定禁止应用程序 访问蓝牙 结果,除非这类应用需要声明 ACCESS_FINE_LOCATION 权限。

在 Android 13 中,Google 将 Wi-Fi 扫描与位置相关内容分离, Android 13 为管理设备与周围 Wi-Fi 热点连接的应用添加 NEARBY_WIFI_DEVICES 运行时权限 (属于 NEARBY_DEVICES 权限组),从而在不需要 ACCESS_FINE_LOCATION 权限的情况下,也可以让应用访问附近的 Wi-Fi 设备。

此前,对于仅需要连接 Wi-Fi 设备,但实际上并不需要了解设备位置的应用来说,以 Android 13 (33)为目标平台的应用现在可以通过 “ neverForLocation ” 属性来完善申请 NEARBY_WIFI_DEVICES 权限。

这项新权限会影响几个不同的 Wi-Fi 用例,包括以下用例:

所以开发需要区分不同api对应的权限;

由于 NEARBY_WIFI_DEVICES 权限仅适用于 Android 13 或更高版本, 如果是 Android12L(32) 以及以下的 App 应保留对 ACCESS_FINE_LOCATION 的所有声明:

以 Android 13(33) 为目标平台时,如果应用不会通过 Wi-Fi API 推导物理位置,请在清单文件中将 usesPermissionFlags 属性设为 neverForLocation。

所以总结: 以 Android 13(33) 为目标平台的应用程序,访问附近的 WI-FI 设备。除特例API需要申请ACCESS_FINE_LOCATION外,其他需要申请 android.permission.NEARBY_WIFI_DEVICES 运行时权限

Android 13 中引入了 “在使用时” 访问身体传感器(例如心率、体温和血氧饱和度)的概念,此访问模式与 Android 10(API 级别 29)系统为位置信息 引入的模式非常相似。

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

当 App 以 Android 13(33) 或更高版本为 Target 的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 <intent-filter> 元素匹配时,系统才会传送该 intent,换言之系统会屏蔽所有不匹配的 intent,但以下情况除外:

为了帮助提高运行时接收器的安全性,Android 13 允许你指定 App 中的特定广播接收器是否应被导出以及是否对设备上的其他应用可见,此变更是 Android 12 更安全的组件 的延续;

以 Android 13(33) 或更高版本为目标平台的应用,必须为每个广播接收器指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED ,否则当 App 尝试注册广播接收器时,系统会抛出 SecurityException

在 Android 13中,谷歌添加了一个新的API,允许开发者降级权限。

应用程序可以触发撤销授予调用 API 的包的一个或多个运行时权限,不需要访问特定运行时权限控制 API 的应用程序可以自行撤销这些权限,这样用户就可以确保这些应用程序不会在不知情的情况下使用这些API。

如需撤消特定运行时权限,请将该权限的名称传入 revokeOwnPermissionOnKill() 方法,如需同时撤消一组运行时权限,请将这组权限的名称传入 revokeOwnPermissionsOnKill() 。

系统只有在安全的情况下才会触发撤消操作,也就是当有应用组件仍在前台运行,或者有另一个应用正在访问你应用的组件(如 content provider)时不会发生撤消。

Android 之前一直提供了一个剪贴板服务,所有 App 都可以使用它来放置和检索文本。

尽管从技术上讲,任何应用都可以清除全局剪贴板中的主内容(只要它们是前台应用或 Android 10+ 上的默认输入法),但 Android 本身不会自动清除剪贴板。

这意味着任何留在全局剪贴板中的剪贴板内容,都可以在以后被应用程序读取,尽管 Android 的剪贴板访问有 toast 消息可能会提醒用户。

Android 13 增加了剪贴板自动清除功能,此功能在默认情况下处于禁用状态,在经过设定的时间后,将自动从全局剪贴板中清除主剪辑, 默认情况下经过3600000毫秒(60分钟)后,剪贴板将被清除。

每次执行复制/读取(写入剪贴板 setPrimaryClip ,读 getPrimaryClip )时,会重置一个消息 timeout(60min),之后会自动清除剪贴板内存中的内容,即60min内,如果一直没有写入剪贴板的操作,剪贴板的内容会被自动清除。

Android 13 的新前台服务( Foreground Services:FGS)任务管理器显示当前运行前台服务的应用程序列表,此列表称为活动应用程序,可以通过下拉通知抽屉并点击启示来访问,这时候每个应用程序旁边都会有一个“停止”按钮。

利用 JobScheduler,应用可使用 JobInfo.Builder.setPrefetch() 将特定作业标记为“预提取”,这意味着理想情况下这些作业应该在应用下一次启动前提前一点运行,以提升用户体验。

过去,JobScheduler 仅使用该信号让预提取作业有机会使用免费或多余的数据,在 Android 13 中系统现在会尝试确定应用下次启动的时间,并根据该估算值运行预提取作业,应用应尝试使用“预提取”来完成他们想要在下次应用启动前完成的任何工作。

Android 13 中引入了 电池资源利用率 功能,以便为系统提供多种方法来更好地管理设备电池续航时间:

个推解读android13新特性,发布《android13适配指南》(代码片段)

8月16日,谷歌宣布Android13新系统的源代码已经上传到Android开源项目(AOSP)中,Android13正式发布。自从2022年2月Android13第一个预览版上线以来,历经7个月的测试和优化,正式版本的Android13终于来了!Andro... 查看详情

个推解读android13新特性,发布《android13适配指南》(代码片段)

8月16日,谷歌宣布Android13新系统的源代码已经上传到Android开源项目(AOSP)中,Android13正式发布。自从2022年2月Android13第一个预览版上线以来,历经7个月的测试和优化,正式版本的Android13终于来了!Andro... 查看详情

android适配入坑指南+解决痛点

概述Android屏幕尺寸各异,而我们不可能根据各种尺寸都设计一套原型图去匹配,我们需要利用适配这一个过程把同一张原型图设计的样式尽可能以同样地视觉效果呈现在不同地屏幕上。Android适配最核心的问题有两个࿰... 查看详情

android适配指南(代码片段)

AndroidVersionAdapter:安卓版本适配全套指南Android版本适配全套指南项目地址:Github、码云当我在做Android版本适配工作的时候很痛苦,那个时候我在想有没有一个文档,将所有的关于Android版本适配资料全部收集起来,... 查看详情

android全面屏适配指南

何为全面屏全面屏是手机业界对于超高屏占比手机设计的一个宽泛的定义。从字面上解释就是,手机的正面全部都是屏幕,四个边框位置都是采用无边框设计,追求接近100%的屏占比。但受限于目前的技术,还不能做到手机正面... 查看详情

iphonex的ui界面适配官方指南!

...果发布了带刘海的iPhoneX,这个屏幕需要iOS开发者做新的适配,会后苹果发布了iPhoneX的适配指南,我们将它翻译出来供大家参考。2、iPhoneXiPhoneX拥有一个宽大的、高分辨率、圆角的、扩展到边缘的屏幕,提供了以前从未有过的沉... 查看详情

androidr兼容性适配指南(代码片段)

AndroidRAndroid11基于Android早期版本构建,增加了多种功能和更新,以保障用户安全并提高透明度和可控性。所有开发者都应查看隐私功能并测试他们的应用。具体影响可能会因每个应用的核心功能、目标平台和其他因素而... 查看详情

androidr兼容性适配指南(代码片段)

AndroidRAndroid11基于Android早期版本构建,增加了多种功能和更新,以保障用户安全并提高透明度和可控性。所有开发者都应查看隐私功能并测试他们的应用。具体影响可能会因每个应用的核心功能、目标平台和其他因素而... 查看详情

android13适配(代码片段)

遇到的一些问题1.WebChromeClient的APIonReachedMaxAppCacheSize没了'onReachedMaxAppCacheSize'overridesnothing//扩充缓存的容量overridefunonReachedMaxAppCacheSize(spaceNeeded:Long,totalUsedQuota:Long,quotaUpdater:Q 查看详情

android13(t)的target适配问题总结(代码片段)

最近在做Android13(T)的Target适配,整理了适配过程中遇到的问题分以下三部分:影响所有应用的变更(包含target33),只影响TargetSdkVersion=33的变更,其他更改(新增或者改善的功能).1.影响所有应用的变更1.1必须要适配此项1.1.1通知的运行... 查看详情

android13适配(代码片段)

...一.创建安卓13模拟器或使用安卓13系统真机调试. 1.下载Android13SDK:2.设置模拟器二.功能变化概览及适配方案1.读写SD卡权限的调整​​​​​​​2.撤销权限3.通知权限的调整4.后台运行限制一.创建安卓13模拟器或使用安卓13系... 查看详情

android新版本适配-android13最全适配方案(代码片段)

前言: 适配Android13事不容缓2022年9月14-2022年9月15日,Google中国开发者大会在上海举办,大会上,演讲嘉宾大约抽出了半个小时时间讲解android13的新特性。这也意味着,Android离我们越来越近了。目前,小米... 查看详情

android12新特性及适配指南

Android12(API31)于2021年10月4日正式发布,正式版源代码也于当日被推送到AOSPAndroid开源项目。截止到笔者撰写这篇文章时,国内各终端厂商的在售Android设备,已经逐步开启了Android12正式版本的更新。当前,... 查看详情

个推技术分享:android12更新详解及适配指南(代码片段)

10月4日,谷歌将Android12源代码推送至Android开源项目 (AOSP)。自从2021年2月发布Android12第一个预览版以来,历经9个月时间测试和优化,正式版本的Android12终于来了!不仅在UI方面做了不少升级,Android12对个人隐私... 查看详情

android13带来了哪些新功能?需要哪些适配工作?(代码片段)

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

android13适配(代码片段)

...tings.setCacheMode(WebSettings.LOAD_DEFAULT);IntentFilter在之前版本的Android系统中,只需将android:exported设为true就可以跨应用显式启动Activity和Service,即使intent-filter中的action或者type不匹配,也能够启动 查看详情

android13带来了哪些新功能?需要哪些适配工作?|开发者说·dtalk

...:BennuC,原文发布于:BennuCTech前言目前Google已经发布了Android13的正式版,虽然国内的手机能用上Android13还有一段时间,不过开发者们可以通过模拟器来体验,那么我们来看看Android13都有哪些重要的改变,我们适... 查看详情

适配器中的autocompletetextview无法正常工作(代码片段)

...; <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <AutoCompl 查看详情