谷歌的Android Q到底有哪些新特性及变更?

【安卓 R 源码】 bindService 源码分析 使用bindService主要分两种情形: 1. Service的调用者client与Service在同一个App中; 2. Service的调用者client是App1中的一个Activity,而Service是App2中的Service,client与service分属两个App,这种情形下主要用于实现跨进程的通信。 bindService 的生命周期: Service被绑定bindService()的时候调用onCreate()和onBind()方法,onStartCommand()方法不被 阅读详情

Android Q 隐私更改相关介绍

存储范围变更

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

外存中私有目录权限变更

Android Q 为每个应用程序提供了一个独立的在外部存储设备的存储沙箱,没有其他应用可以直接访问您应用的沙盒文件。由于文件是私有的,因此访问这些文件不再需要任何权限。
并且 Android Q 推荐了获取外部存储私有文件的最佳位置:即Context.getExternalFilesDir()返回的位置,因为此位置在所有Android版本中表现一致。使用此方法时,请传入与要创建或打开的文件类型对应的媒体环境。例如,要访问或保存app-private图像,请调用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)。

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

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

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

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

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

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

访问共享集合

访问共享集合通过 MediaStore API ,如 MediaStore.Images、MediaStore.Video、MediaStore.Audio、MediaStore.Downloads。

需要注意的是:对于 Android Q 上新安装的应用,对 getExternalStoragePublicDirectory()的调用仅提供对应用已存储在其隔离存储沙箱中的文件的访问权限。要保持对其他应用程序文件的访问权限,请更新应用程序的逻辑以使用MediaStore。

新增 ACCESS_MEDIA_LOCATION 权限

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

  1. 将新的 ACCESS_MEDIA_LOCATION 权限添加到AndroidManifest。

  2. 获取位置信息

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

存储新特性兼容

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

  1. targetSdkVersion <= Android 9
  2. 你的应用安装在从 Android 9 升级到 Android Q 的设备上
识别特定的外部存储设备

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

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

Activity后台活动限制

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

  1. 该APP具有可见窗口,例如有前台Activity
  2. 位于前台的另一个 APP 发送属于该应用程序的 PendingIntent。
  3. 系统发送属于该 APP 的PendingIntent,例如点击通知。
  4. 系统向应用程序发送广播,例如SECRET_CODE_ACTION。只有应用程序预期启动UI的特定广播才免除。
活动限制的兼容性

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

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

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

设备位置权限的访问控制

用户可以更好地控制应用何时可以访问设备位置。当在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>

位置限制的兼容性

如果您的应用在 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,但用户可以通过选择您的应用仅应在前台访问位置信息来撤消此权限。
对数据和标识符的更改

影响在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,系统将忽略全屏意图。

阅读更多

程序员接私活经验总结

(Android)面试题级答案(精选版)

还在期待安卓9.0吗?Android 10.0要来了

阿里内部的那个牛逼带闪电的Java诊断工具终于开源了

锤子科技"临死前"被"接盘",内部人士爆料已改签今日头条母公司

相信自己,没有做不到的,只有想不到的

如果对技术比较感兴趣,欢迎关注公众号:终端研发部,id:codeGoogler ,一起交流和学习~

Android 10.0 系统framework禁止访问应用信息页 在定制化开发中,在app崩溃后,会弹出弹窗提醒奔回了,然后弹窗可以通过点击应用信息按钮进入应用信息页这对于权限的管控不好处理,所以要求frameworks层禁止通过activity进入应用详情页。 阅读详情

相关推荐

Android 10.0 禁用wifi随机mac地址功能(采用固定mac地址功能)

Android 8.0 开始,Android 设备在未连接到网络的情况下探测新网络时会使用随机 MAC 地址,但是这样会导致在ota升级时,由于wifi的mac 地址不固定导致会升级失败的风险 所以要求wifi的mac地址固定 根据文档发现是由config_wifi_support_connected_mac_randomization 这个config.xml的属性值来设置是否随机产生mac地址 所以搜索framework/base 下发现 core/res/res/values/config.xml:7

安卓兼职framework和app工程师的博客 6095

@UnsupportedAppUsage注解

在android-R中,google拓展了原本的UnsupportedAppUsage来限制framework中的某些定义无法被外部应用访问。采用这中方案来强化mainlane模式,强制厂商mainlane自身feature。google也拓展了systemApi注释来保护某些属性无法被sdk外部访问。

xiaowang_lj的博客 5377

戴尔PowerEdge服务器R450 RAID配置步骤

戴尔PowerEdge服务器R450 RAID配置步骤

且听风呤tmj的博客 6910

[framework] @UnsupportedAppUsage 注解

这个标注本身并不会影响到代码的编译或运行,它只是一种注解,起到标记和提醒的作用。而对于普通应用开发者来说,他们通常不会直接与这个注解打交道,但应时刻注意只使用官方文档中明确公开的API,避免使用那些未公开,但实际上可以访问的内部API。它会提醒其他应用开发者,这个API并未正式公开,可能在未来的Android版本中进行修改或移除,他们应该避免在应用中使用这样的API。它告知框架开发人员,这个API已经被大量应用使用,故在未来的版本更新中,需要考虑到这一点,谨慎修改,以尽量避免对已有应用造成影响。

qq_27122177的博客 2276

Vivado Schematic视图实战:从RTL分析到布局布线,如何用它快速定位设计问题(附2019.1版操作)

本文深入解析Vivado Schematic视图在FPGA设计中的关键作用,从RTL分析到布局布线全流程,帮助工程师快速定位设计问题。通过三重视图对比、高效调试四步法和高级技巧,提升问题排查效率,缩短调试时间。文章结合2019.1版操作指南和实战案例,展示如何利用Schematic视图解决典型设计问题。

weixin_30591551的博客 488

COMSOL金属氢化物-放氢过程

"层流"的出口设置压降函数,解决“找不到一致的初始值”问题,主要是一开始设置出口为1atm的话,压力场过渡太剧烈,不好找到初始解,要么就先算个稳态流场,这种也能求解。注:P0是根据实测PCT的插值曲线(函数名称为:p_iso)得到的,根据初始质量储氢量wtw0,和初始温度条件T0,然后根据函数p_iso(wtw0)*exp(-deltHd/R_const*(1/T0-1/303.15[K]))求解获得。若"初始步长"选择框不勾上,前面0~5s内的求解容易发散,然后求解失败。2、设置"达西定律"的。

qq_24800941的博客 1929

Android Q(10.0)版本新特性和兼容性适配

北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了。Android Q 为开发者们带来了许多新功能,如折叠屏增强项、新网络连接 API、全新的媒体解码器、摄像头新功能、NNAPI 扩展、Vulkan 1.1 图形支持等等。2019/4 Beta2版本发布 ,5月份将会正式发布,本文将带大家对...

weitao_666的博客 3万+

Altium Designer铺铜陷阱:为什么你的死铜总是清除不干净?

本文深入探讨Altium Designer中铺铜操作导致死铜无法清除的常见问题,分析死铜形成的五大诱因,并提供高级参数优化和网络连接性验证技巧。通过调整边界计算精度和泪滴算法设置,有效解决死铜残留问题,提升PCB设计质量与制造良率。

weixin_29169505的博客 359

Android Q 变更和新特性

安全和隐私变更 隐私保护是Android Q重要的主题之一,Android Q带来了一系列增强用户隐私保护的变更。 1 应用文件存储空间限制 应用访问限制是Android Q影响最大变更之一。在Android Q系统中,应用只可以通过路径读取自己应用沙箱内的文件,如果需要读取应用沙箱外的文件,需要使用安卓统一接口来实现。该变更对大部分应用都会产生较重大的影响,需要开发者进行...

weixin_30652491的博客 94

xhs私信协议分析

之前分析过xhs的shield算法,今天再聊聊xhs的私信,文章仅供学习参考研究交流,如有侵权请联系删帖。经过抓包分析发现私信接口并不是走的http协议,而是socket协议。而要获取socket包则需要使用wireshark软件1、protobuf的包体中的序号7,多次验证后发现文字信息的需要需要固定成12、protobuf的包体中的序号12,多次验证后发现文字信息的需要需要固定成1后续有时间的话,再研究一下视频和图片格式的私信协议,这次就分析到这里吧。

佛系更新... 3483

STC8H开发(十六): GPIO模拟SPI驱动Ci24R1实现低成本无线遥控

本文详细介绍了如何使用STC8H单片机通过GPIO模拟SPI驱动Ci24R1无线模块,实现低成本无线遥控方案。内容涵盖硬件设计要点、软件驱动开发技巧及实战优化经验,特别适合消费电子产品开发者参考。Ci24R1凭借其高性价比和双模协议支持,成为替代传统nRF24L01+的理想选择。

weixin_30378623的博客 349

Android Q版本应用兼容性适配指导

目录 Android Q版本应用兼容性适配指导... 1 1. 背景说明... 4 2. 存储空间限制... 4 2.1背景 4 2.2兼容性影响... 5 2.3 适配指导... 7 3. 禁止应用读取Device ID.. 27 3.1背景 27 3.2兼容性影响... 27 3.3适配指导... 27 4. Mac...

irizhao的专栏 2万+

PCL CSF布料模拟算法【2026最新版】

CSF布料模拟地面滤波算法的PCL实现,博客长期更新,本文最近更新时间为:2026年10月26日。

点云侠的博客 3916

Android Q 要来了,给你一份很"全面"的适配指南!

Android Q 越来越近了,最近 Google 又发布了 Android Q Beta 的第五个版本,眼瞅着这进度,在今年Q3 季度,Android Q 就正式和用户见面了,在此之...

承香墨影的博客 2052

2024年12月数据月报

2024年12月大数据月报,为您准备了阿里、字节、百度等大厂150多篇实践案例

SmartSi 2654

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android Q 适配 之 存储新特性

码个蛋(codeegg)第 689 次推文原文:https://mp.weixin.qq.com/s/aiDMyAfAZvaYIHuIMLAlcg!友情提示:本文内容较多,建议先收藏,在...

陈宇明 327

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android Q Beta登场,新特性抢先看!

Android Q Beta登场,新特性抢先看! Android Q 开发者预览版今天凌晨正式发布,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作。大家快来看看这次的安卓新版本有哪些变化吧! 安全和隐私变更 隐私保护是Android Q重要的主题之一,Android Q带来了一系列增强用户隐私保护的变更。 应用文件存储空间限制 应用访问限制是Android Q影响最大变更之一。在And...

KingKong的博客 303

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android Q(10.0 API29)版本新特性和兼容性适配

1、本文档基于谷歌AndroidQ官方文档和一加Q版本应用兼容性整改指导 2、本文档主要对影响比较大的部分进行简单总结,内容并不全面; 3、版本号对应关系: Android-Q = Android-10 = Api29 Android-P = Android-9.0 = Api28

恬静释然的博客 6396

Android Q(10.0)版本新特性以及兼容性适配

北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了。Android Q 为开发者们带来了许多新功能,如折叠屏增强项、新网络连接 API、全新的媒体解码器、摄像头新功能、NNAPI 扩展、Vulkan 1.1 图形支持等等。 按往常的习惯,新版本刚出怎么着也得到下半年才开始考虑适配,但是上月末的...

倚栏静望的博客 8504

android q新特性

谷歌针对的Q预览版的特性分享,内容涉及比较多。遗憾的是没有提供PPT给参会者,如下内容根据提纲与回忆整理,如有缺失敬请谅解。 适配Q重点归纳 限制后台拉activity 非系统应用无法获取到IMEI 外部存储的隔离存储;公共媒体文件的存储 后台地理位置权限 适配折叠屏 全屏手势导航,应用充分利用全面屏,建议应用不要覆盖系统手势,否则可能导致手势冲突,影响用户使用习惯 应用使用黑色主...

qq_33468215的博客 1358

androidq获取文件正式路径_android Q 新特性

谷歌针对的Q预览版的特性分享,内容涉及比较多。遗憾的是没有提供PPT给参会者,如下内容根据提纲与回忆整理,如有缺失敬请谅解。适配Q重点归纳限制后台拉activity非系统应用无法获取到IMEI外部存储的隔离存储;公共媒体文件的存储后台地理位置权限适配折叠屏全屏手势导航,应用充分利用全面屏,建议应用不要覆盖系统手势,否则可能导致手势冲突,影响用户使用习惯应用使用黑色主题,灵活动态变化Android ...

weixin_39624769的博客 360
上一篇: 20行 Python代码实现验证码识别
下一篇: 马云也谈996,对开发者真的是一福利吗?
你说神码
博客等级 码龄9年 41粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值