安卓11适配攻略抢先看

引言

近期,Google 发布了 Android 11的平台稳定版本。Android 11 将在确保用户隐私安全的前提下,更好地让用户畅享最新科技。

下图是 Android 11 发布整体流程的时间线:

个推深耕开发者领域,一直紧跟行业发展趋势,对Android 11的有关更新展开了深入研究。本文将从分区存储、应用包可见性、权限变化和新功能四个方面来谈谈 Android 11 新特性,以帮助开发者更快速、更便捷地上手适配Android新系统。

作者| 个推高级安卓开发工程师 一七

正文

分区存储

Android 10之前,外部存储区的内容主要以两种形式存在,一种是由应用的包名命名,归属于特定应用目录下的内容,另一种是存储在公共存储区域的内容。

在Android 10 中,Google首次引入了分区存储,将公共区域划分成了不同的集合,并且在媒体文件和其他文档之间建立了清楚的分割。经过划分之后应用不可以随意访问外部存储区中的文件,而只能访问媒体文件。如果想访问包含更多细节数据的其他文档,应用专门向用户申请有关文档的访问权限。

分区存储是需要以 Android 10 为目标平台的,系统默认强制执行。如果在 AndroidManifest 中添加了 requestLegacyExternalStorage=true 标志,就可以不受此限制。但是当 target API 更新为 30 后,系统会忽略该配置。

如果有数据需要迁移,可以在 AndroidManifest 中将 preserveLegacyExternalStorage 属性设为 true ,当用户升级到以 Android 11 为目标平台时,这个配置就会生效。具体而言,这个配置在用户重新安装该应用前都是有效的。

针对以 Android 11 为目标平台的应用 (targetSdkVersion = 30) ,WRITEEXTENRNALSTORAGE 和 WRITEMEDIASTORAGE 不再提供其他任何访问权限 。

某些应用的核心功能可能需要访问大量的文件,例如文件管理操作、备份和恢复操作等等,此时就需要申请 MANAGEEXTERNALSTORAGE 权限。我们可以通过使用 ACTIONMANAGEALLFILESACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,让用户为应用授予所有文件的管理权限。

应用包可见性

在 Android 11 之前,我们可以通过 PackageManager.getInstalledPackages(0) 获取其他所有应用的包名等信息。

Android 11 为了增加安全性,更好地保护用户的隐私,对应用包的可见性做出了一些改动。

当 targetSdkVersion 为 30 时,如果我们用getPackageInfo(“another.app”,0) 获取其他应用包信息时 ,会出现 NameNotFoundException 的异常。

我们可以在 AndroidMainfest 中添加 <queries>来适配特定的使用场景:(该配置相当于是添加应用白名单)

已知想获取的包名:

查询一组具有特定用途的应用或与其交互:

对于一些特殊应用,想要获取所有包名信息:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

权限变化

在 Android 11 中,系统为用户的私人数据提供了更多可供选择的授权方式,应用也加大了后台对位置的访问权限限制。

对应摄像头、位置信息和麦克风这几个数据类型,用户可以授予一次性的临时访问权限。

只要是在Android 11 上,该限制都会生效,如下图:

这个一次性权限的生效周期指的是:

  • 应用 Activity 可见期间
  • 应用转为后台后的短时间内
  • 前台服务存活期间
  • 当用户撤销单次授权后,应用进程退出,再次打开之后需要对应用进行重新授权期间

位置权限

在Android10 之前,我们通过ACCESSCOARRSELOCATION 或 ACCESSFINELOCATION(精确位置) 配置即可申请前后台位置权限。

Android 11将位置权限分为前台和后台两种权限。前文说的主要是前台权限,授权方式没有变化。应用想要申请后台权限,除了需要在清单文件中额外添加 ACCESSBACKGROUNDLOCATION 权限外,还需要应用主动引导用户到指定页面授权。

新功能

增加应用退出原因功能

在Android 11之前,我们想要了解应用退出的原因以及状态,都比较费劲。现 Android 11 引入了 方法:ActivityManager.getHistoricalProcessExitReasons() ,

可以让我们清楚地了解到应用退出的原因。

可变刷新率

应用和游戏现在可以为其窗口设置首选帧率。大多数 Android 设备以 60Hz 的刷新率更新屏幕,但是某些设备支持多种刷新率,例如 90Hz 和 60Hz,并可在运行时切换。在这些设备上,系统会基于首选帧率来为应用选择最佳刷新率。

结语

以上主要介绍了Android 11 对分区存储、应用包可见性和权限变化等模块的更新介绍。Google 在力求让用户更加便捷地使用Android系统的基础上,也希望用户数据的隐私和安全性能在最大程度上受到保护。

个推致力于为开发者提供好用的SDK。为了提升SDK的稳定性、兼容性,个推也对Android 11 的新特性进行了深入研究,并即将针对旗下产品推出全新的适配方案,以满足开发者不同的使用场景。此外,我们希望能与更多开发者交流探索Android新技术,优化用户体验,一同打造更好的安卓开发生态圈。

到此这篇关于安卓11适配攻略抢先看的文章就介绍到这了,更多相关安卓11适配内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Android10的分区存储机制(Scoped Storage)适配教程

    1. 简介 大家应该都有过这样的体会,手机用着用着里面就充斥着各种不懂的文件夹和文件.甚至是连已经删除的软件的文件夹还存在. 为什么会发生的这样的问题呢? 因为Google的缺席,导致Android生态野蛮生长,导致很多开发规范没有完全被落实. 为了解决这样的问题,Google决定重拳出击,提出了分区存储(Scoped Storage)机制,也叫沙盒存储机制. 那么什么是沙盒存储机制呢. 沙盒机制是一种安全机制,用于防止应用读取其他应用的数据. 每个应用程序都有自己的存储空间. 应用程序不能翻过

  • Android10填坑适配指南(实际经验代码)

    今天看到一篇好的文章,分享给大家,膜拜大佬. Android10填坑适配指南,包含实际经验代码,绝不照搬翻译文档 1.Region.Op相关异常:java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed 当 targetSdkVersion >= Build.VERSION_CODES.P 时调用 canvas.clipPath(path, Region.Op

  • 安卓11适配攻略抢先看

    引言 近期,Google 发布了 Android 11的平台稳定版本.Android 11 将在确保用户隐私安全的前提下,更好地让用户畅享最新科技. 下图是 Android 11 发布整体流程的时间线: 个推深耕开发者领域,一直紧跟行业发展趋势,对Android 11的有关更新展开了深入研究.本文将从分区存储.应用包可见性.权限变化和新功能四个方面来谈谈 Android 11 新特性,以帮助开发者更快速.更便捷地上手适配Android新系统. 作者| 个推高级安卓开发工程师 一七 正文 分区存储

  • Android 10 适配攻略小结

    相比较去年写的Android 9适配,这次Android 10的内容有点多.没想到写了我整整两天,吐血中... 准备工作 老规矩,首先将我们项目中的 targetSdkVersion 改为 29. 1.Scoped Storage(分区存储) 说明 在Android 10之前的版本上,我们在做文件的操作时都会申请存储空间的读写权限.但是这些权限完全被滥用,造成的问题就是手机的存储空间中充斥着大量不明作用的文件,并且应用卸载后它也没有删除掉.为了解决这个问题,Android 10 中引入了 Sco

  • iOS13原生端适配攻略(推荐)

    随着iOS 13的发布,公司的项目也势必要着手适配了.现汇总一下iOS 13的各种坑 1. KVC访问私有属性 这次iOS 13系统升级,影响范围最广的应属KVC访问修改私有属性了,直接禁止开发者获取或直接设置私有属性.而KVC的初衷是允许开发者通过Key名直接访问修改对象的属性值,为其中最典型的 UITextField 的 _placeholderLabel.UISearchBar 的 _searchField. 造成影响:在iOS 13下App闪退 错误代码: // placeholderL

  • 详解Android 折叠屏适配攻略

    随着三星 Galaxy Fold 和 华为 Mate X 的发布,折叠屏手机开始进入大家的视线.在改变手机体验的同时,也给我们开发人员在适配方面带来了更多的挑战.本文给大家介绍一下 Android 开发中和折叠屏相关的一些概念,以及如何进行折叠屏的适配. 折叠屏适配 折叠屏之所以需要适配,是因为我们的应用有可能在运行的过程中,所在的屏幕尺寸发生了变化,这种情况对现有项目多少都会产生一些问题. 所以折叠屏适配的本质是: 当应用运行时,屏幕的尺寸.密度或比例发生了变化,应用能够继续在变化后的屏幕上正

  • NodeJs——入门必看攻略

    关于NPM: npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 一 NodeJs安装与NPM管理 安装 前往NodeJs官网,下载安装包直接安装.同时NodeJs默认包含NPM模块.后者需要更新到最新版本.-v 查看版本信息,有则安装成功.某些版本不支持读-v参数大小写敏感,如报错尝试大写-V. node -v v4.4.4 npm -v 2.15.1 更新npm模块

  • Python基础篇之初识Python必看攻略

    Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. Python和其他语言的对比: C 和 Python.Java.C#等 C语言: 代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作 其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行 Python 和 C  Python这门语

  • Win98注册表应用50例—注册表使用全攻略之十

    Win98注册表应用300例-注册表使用全攻略之十 1.自动刷新 每次在窗口添加一个文件夹或删除一个对象后,须要按键对窗口 进行重新刷新,很麻烦.通过修改注册表可以达到自动刷新的目的. 点击HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTRO LSET\CONTROL\UPDATE,修改 "UPDATEMODE"值,由"1"改为"0". 2.修改系统版权信息 点击HKEY_LOCAL_MACHINE\SOFTWARE\M

  • VSCode插件开发全攻略之package.json详解

    package.json 在详细介绍vscode插件开发细节之前,这里我们先详细介绍一下vscode插件的package.json写法,但是建议先只需要随便看一下,了解个大概,等后面讲到具体细节的时候再回过头来看. 如下是package.json文件的常用配置,当然这里还不是全部: { // 插件的名字,应全部小写,不能有空格 "name": "vscode-plugin-demo", // 插件的友好显示名称,用于显示在应用市场,支持中文 "displa

  • 驱除威胁—无线网络防黑完全攻略

    由于无线局域网以无线电波作为数据传输媒介,因此在安全问题上总会带给家庭用户或多或少的威胁,接下来我们选用支持WPA协议的中怡数宽IP806LM无线路由器,作为例子,手把手地教你进行无线局域网的安全设置. 更改预设的无线网络名称 每个无线网络都有一个识别名称,称为无线网络名称(Network Name)或服务集标志符(Service Set IDentifier, SSID).所有无线路由器或无线AP,都有自身的无线网络名称,而且所有无线网络的客户端,都必须提供与之对应的无线网络名称,方能成功建立

  • 生成PDF全攻略之在已有PDF上添加内容的实现方法

    项目在变,需求在变,不变的永远是敲击键盘的程序员..... PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片.... 经历几次失败的尝试,终于获取到了正确的代码书写方式. 在此记录总结,方便下次以不变应万变,需要的 jar 请移步:生成PDF全攻略 PdfReader reader = new PdfReader("E:\\A.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStr

随机推荐