Android10.0(Q)新特性和行为变更

2023-05-16

Android Q 还为开发者们带去了许多新功能,如折叠屏增强项、新网络连接 API、全新的媒体解码器、摄像头新功能、NNAPI 扩展、Vulkan 1.1 图形支持等等。2019/4 Beta2版本发布(点击查看Google官文),5月份将会正式发布。

Android Q 隐私更改相关介绍

1,存储范围变更

Android Q 改变了应用程序访问设备外部存储上文件的方式。 通过使用更细粒度的媒体特定权限替换以前的 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE权限。

2,外存中私有目录权限变更

Android Q 为每个应用程序提供了一个独立的在外部存储设备的存储沙箱,没有其他应用可以直接访问您应用的沙盒文件。由于文件是私有的,因此访问这些文件不再需要任何权限。

并且 Android Q 推荐了获取外部存储私有文件的最佳位置:即Context.getExternalFilesDir()返回的位置,因为此位置在所有Android版本中表现一致。使用此方法时,请传入与要创建或打开的文件类型对应的媒体环境。例如,要访问或保存app-private图像,请调用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)。

3,公共媒体集合特性

  1. 定义公共媒体集合:Photos & Videos、Music、 Downloads。

  2. APP 无需请求任何权限即可在这些共享集合中创建和修改自己的文件。

  3. 如果你的APP想创建和修改其他应用已创建的文件,则必须首先请求相应的权限:

访问Photos & Videos目录的其他应用程序文件 需要请求 READ_MEDIA_IMAGES 或 READ_MEDIA_VIDEO 权限,具体取决于您的应用程序需要访问的文件类型。

访问 Music 共享集合中的其他应用程序文件需要 READ_MEDIA_AUDIO 权限。

没有访问Downloads共享集合的权限,您的应用可以访问此集合中自己的文件。但是,要访问此集合中的其他应用程序文件,您必须允许用户使用系统的文件选择器应用程序选择文件。

4,访问共享集合

访问共享集合通过 MediaStore API ,如 MediaStore.Images、MediaStore.Video、MediaStore.Audio、MediaStore.Downloads。
需要注意的是:对于 Android Q 上新安装的应用,对 getExternalStoragePublicDirectory()的调用仅提供对应用已存储在其隔离存储沙箱中的文件的访问权限。要保持对其他应用程序文件的访问权限,请更新应用程序的逻辑以使用MediaStore。

5,新增 ACCESS_MEDIA_LOCATION 权限

一些照片在其数据中会包含位置信息,允许用户查看拍摄照片的位置。由于此位置信息是敏感的,因此我们想获取位置信息需要以下几步:

        1.将新的 ACCESS_MEDIA_LOCATION 权限添加到AndroidManifest。
        ​​​​​​​2.获取位置信息

photoUri = MediaStore.setRequireOriginal(photoUri);
InputStream stream = getContentResolver().openInputStream(photoUri);
//从流中读取位置信息

6,存储新特性兼容

target API 级别等于 Android Q 的应用,或者在运行Android Q 的设备上新安装的应用默认都会采取新的权限策略
如果你的APP同时满足以下两个条件,则会兼容以前的权限策略:

  1. targetSdkVersion <= Android 9

  2. 你的应用安装在从 Android 9 升级到 Android Q 的设备上

识别特定的外部存储设备
Android Q 为每个外部存储设备提供唯一的卷名。


 //获取卷名方式
Set<String> volumeNames = MediaStore.getAllVolumeNames(context);  

7,Activity后台活动限制

Android Q 对应用未经通知用户就启动进行了极大地限制,在Android Q上运行的应用只有在满足以下一个或多个条件时才能启动活动:

  1. 该APP具有可见窗口,例如有前台Activity

  2. 位于前台的另一个 APP 发送属于该应用程序的 PendingIntent。

  3. 系统发送属于该 APP 的PendingIntent,例如点击通知。

  4. 系统向应用程序发送广播,例如SECRET_CODE_ACTION。只有应用程序预期启动UI的特定广播才免除。

8.活动限制的兼容性

此行为更改适用于在 Android Q 上运行的所有应用,甚至是针对Android 9(API级别28)或更低级别的应用。但是,只要您的应用以用户互动的直接结果开始活动,您的应用很可能不会受到此更改的影响。实际上,大多数应用程序都不受此更改的影响。

此外,Android Q 建议我们 后台应用程序都应创建通知,以便向用户提供信息,而不是直接启动活动。

一些特殊情况如:来电或者警报,需要立刻启动 Activity,则可以通过创建高优先级的通知,并提供 fullscreen itent。如何创建高优先级通知?

9.设备位置权限的访问控制

用户可以更好地控制应用何时可以访问设备位置。当在Android Q上运行的应用程序请求位置访问时,会通过对话框的形式给用户进行授权提示。此对话框允许用户授予对两个不同范围的位置访问权限:在使用中(仅限前台)或始终(前台和后台)。

新增权限 ACCESS_BACKGROUND_LOCATION

如果你的应用针对 Android Q 并且需要在后台运行时访问用户的位置,则必须在应用的清单文件中声明新权限


<manifest>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>  

10.位置限制的兼容性

如果您的应用在 Android Q 上运行但针对的是 Android 9(API级别28)或更低版本,则会出现以下行为:

  1. 如果你的应用为 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 声明  标记,则系统会在安装期间自动为ACCESS_BACKGROUND_LOCATION 添加  标记。

  2. 如果你的应用请求 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION,系统会自动将 ACCESS_BACKGROUND_LOCATION添加到请求中。

  3. 虽然你的应用可以请求并接收 ACCESS_BACKGROUND_LOCATION,但用户可以通过选择您的应用仅应在前台访问位置信息来撤消此权限。

11,允许应用程序降级。

当对商店更新后的版本后悔时,可以“回到过去”即回滚到旧版。
 

12.对数据和标识符的更改

影响在Android Q 上运行的所有应用的更改:

联系人亲缘关系​​​​​​​

        从Android Q开始,该平台不再跟踪联系人亲缘关系信息。因此,如果您的应用对用户的联系人进行搜索,则结果不再按交互频率排序。 “联系人提供程序”指南包含一个通知,说明自Android Q起所有设备上已废弃的特定字段和方法。

MAC地址随机化

        在Android Q 运行的设备默认传输随机的MAC 地址,获取随机MAC地址API:WifiConfiguration.getRandomizedMacAddress()
获取实际硬件MAC地址:WifiInfo.getFactoryMacAddress()。

唯一标识符

        应用必须具有 READ_PRIVILEGED_PHONE_STATE 特权权限才能访问设备的不可重置标识符,包括IMEI和序列号。原则上 Android Q 建议避免使用更容易关联到个人的硬件标识符,而是使用实例ID。实例ID的做法推荐

访问剪贴板数据

        除非您的应用程序是默认输入法编辑器或当前具有焦点的应用程序,否则您的应用程序无法访问剪贴板数据。

影响针对 Android Q API 级别运行的应用的更改:

访问USB串行需要用户许可

        如果您的应用针对Android Q,则您的应用只能在用户授予您访问USB设备或配件的应用权限后才能读取序列号。

相机和连接相关更改

        影响在Android Q 上运行的所有应用的更改:

访问相机信息需要获得许可

        Android Q更改了默认情况下getCameraCharacteristics()方法返回的信息的广度。特别是,您的应用必须具有CAMERA权限才能访问此方法的返回值中包含的潜在设备特定元数据。

启用和禁用Wi-Fi的限制

        在Android Q上运行的应用无法启用或停用Wi-Fi。 WifiManager.setWifiEnabled()方法始终返回false。 如果需要,请使用设置面板提示用户启用和禁用Wi-Fi。

 

 


影响针对 Android Q API 级别运行的应用的更改:

电话,Wi-Fi,蓝牙API所需的精确位置许可

除非您的应用具有ACCESS_FINE_LOCATION权限,否则在Android Q上运行时,您的应用无法在Wi-Fi,Wi-Fi Aware或蓝牙API中使用多种方法。要查看受影响方法的列表,请参阅隐私附录。

Wi-Fi网络配置限制

将Wi-Fi网络列表的手动配置限制在系统应用程序中。如果您的应用针对Android Q,则以下方法不再返回有用数据,下面方法将不会返回有效信息:

  • getConfiguredNetworks()方法始终返回空List

  • addNetwork()和updateNetwork() - 始终返回-1

  • 返回布尔值的每个网络操作 - removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect()和disconnect() - 始终返回false

物理活动识别

针对 Android Q API 级别运行的应用,Android Q为需要检测用户移动的应用程序(例如步行,骑自行车或车辆)引入了新的ACTIVITY_RECOGNITION运行时权限。这旨在让用户了解设置中如何使用设备传感器数据。

 

 

 

Android Q 行为变更

最令我们关心的,还是我们的适配工作。下面,分两部分讲:

一、针对所有运行在 Android Q 上的app的行为变更

非SDK接口限制更新(Non-SDK interface restrictions):
为了确保应用稳定性和兼容性,Google 在 Android O 中开始限制使用哪些非SDK接口(API级别28)。 Android Q 更新了非SDK接口的限制列表,并且修改了限制规则。
1.灰名单修改:在Android 9(API级别28)中,灰名单分为以下两个列表:

(1)lightgrey列表: targetSdkVersion<28 情况下可以使用的非SDK接口

(2)darkgrey list:targetSdkVersion>=28 情况下无法使用的非SDK接口

在 Android Q 中,我们现在将这两个列表统称为 greylist(灰名单),但是受目标API级别限制:

如在 Android P 中被限制的黑灰色名单:darkgrey list 现在叫做 greylist-max-o,
在 Android Q 中被限制的非SDK接口应该称为 greylist-max-p

2.代码注释修改:引入以下注解来区别哪些非SDK接口在哪个API做了限制

@UnsupportedAppUsge    无限制的灰名单

@UnsupportedAppUsage(maxTargetSdk = 0)    黑名单,哪个API都不能调用

@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O)    API <= Android O 可以调用

@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)    API <= Android P 可以调用

Android Q 非SDK接口限制列表过长,这里直接附上查询地址

WIFI P2P 广播(Wi-Fi Direct broadcasts):

在 Android Q 上,与 Wi-Fi Direct 功能相关的广播不再具有粘性。如果你的 APP 依赖于在注册时接收这些广播,可以在初始化时使用适当的get()方法来获取信息,具体可参考 WifiP2pManager 类相关方法。

SYSTEM_ALERT_WINDOW 权限在 Android Go 设备变更

在Android Q(Go版)设备上运行的应用无法接收SYSTEM_ALERT_WINDOW权限。这是因为绘制叠加窗口使用过多的内存,这对低内存Android设备的性能特别有害。

二、针对API级别为 Android Q 的行为变更

如果你的应用将targetSdkVersion设置为“android-Q”或更高版本,则下面的你需要注意了。

灰名单变更

灰名单变更参考“针对所有运行在 Android Q 上的app的行为变更”的策略,意味着@UnsupportedAppUsage(maxTargetSdk < Build.VERSION_CODES.Q) 的非API方法你都需要注意了!!!

共享内存

针对Q的应用不能再直接使用ashmem(/ dev / ashmem),而必须通过NDK的ASharedMemory类访问共享内存。此外,应用程序无法直接对现有的ashmem文件描述符进行IOCTL,而必须使用NDK的ASharedMemory类或Android Java API来创建共享内存区域。在使用共享内存时,此更改可提高安全性和稳健性,从而提高Android整体的性能和安全性。

Android runtime only accepts system-generated OAT files

Android运行时(ART)不再从应用程序进程调用dex2oat。此更改意味着ART将仅接受系统生成的OAT文件。

Permissions changes for fullscreen intents

使用全屏Intent通知的应用必须在其应用的 Manifest 文件中请求 USE_FULL_SCREEN_INTENT 权限,这是正常权限,因此系统会自动授予。 如果针对Android Q或更高版本的应用尝试在不请求USE_FULL_SCREEN_INTENT权限的情况下创建具有全屏的Intent,系统将忽略全屏意图。

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

Android10.0(Q)新特性和行为变更 的相关文章

  • 高通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 都有
  • ./configure 的配置和用法

    Linux环境下的软件安装 xff0c 并不是一件容易的事情 xff1b 如果通过源代码编译后在安装 xff0c 当然事情就更为复杂一些 xff1b 现在安装各种软件的教程都非常普遍 xff1b 但万变不离其中 xff0c 对基础知识的扎实
  • JDK1.8(jdk8.0)新特性

    Java is still not dead and people are starting to figure that out 本教程将用带注释的简单代码来描述新特性 xff0c 你将看不到大片吓人的文字 一 接口的默认方法 Java
  • MQTT协议通俗讲解

    参考 Reference 协议文档 Offical Docs v3 1 1 英文原版 中文翻译版 其他资源 网站 MQTT官方主页 Eclipse Paho 项目主页 测试工具 MQTT Spy xff08 基于JDK xff09 Chro
  • mqtt实现库对比

    发现一片非常好的文章 xff0c 从17个方面 xff0c 介绍几个分布式消息队列系统 xff0c 非常棒的内容 xff0c 方便做技术选型 xff0c 平衡各种 xff1a 17 个方面 xff0c 综合对比 Kafka RabbitMQ
  • 几种直播流媒体协议

    题外话 xff1a HTTP渐进下载流媒体播放 基于TCP yy 乐视 爱奇艺 优酷土豆 搜狐视频 花椒直播 xff0c 主要还是通过rtmp amp hls来实现的 xff0c 但他们也意识到rtmp的天生缺陷 xff0c 所以不管是技术
  • Android9.0(androidP)系统API和行为变化

    这篇文章 xff0c 是Android官方文档的中文版本 注意事项 xff08 AndroidP 特性 xff09 xff1a 1 android os Build VERSION RELEASE xff0c 需要当做字符串类型处理 2 依
  • Android version名称,版本号,API level,代号 表(updateing)

    系统版本OS Version 版本号API level 发布日期release Date 发布代号nick Name 主要特性feature android1 0 API1 2008 10 android1 1 API2 2009 2 an
  • Android10.0(Q)新特性和行为变更

    Android Q 还为开发者们带去了许多新功能 xff0c 如折叠屏增强项 新网络连接 API 全新的媒体解码器 摄像头新功能 NNAPI 扩展 Vulkan 1 1 图形支持等等 2019 4 Beta2版本发布 点击查看Google官