Android 11特性

隐私权限更新

下表汇总了 Android 11 中与隐私权相关的主要变更。

隐私权变更 受影响的应用 缓解策略
强制执行分区存储机制
以 Android 11 为目标平台的应用始终会受分区存储行为的影响 以 Android 11 为目标平台的应用,以及以 Android 10 为目标平台且未将 requestLegacyExternalStorage 设为 true 以停用分区存储的应用 更新您的应用以使用分区存储
详细了解分区存储变更
一次性权限
通过一次性权限,用户可以授予对位置信息、麦克风和摄像头的临时访问权限 以任何版本为目标平台且请求位置信息、麦克风或摄像头权限的应用 在尝试访问受某项权限保护的数据之前,检查您的应用是否具有该权限
遵循请求权限方面的最佳做法
自动重置权限
如果用户在 Android 11 上几个月未与应用互动,系统会自动重置应用的敏感权限 以 Android 11 为目标平台且在后台执行大部分工作的应用 要求用户阻止系统重置应用的权限
详细了解自动重置权限
后台位置信息访问权限
Android 11 更改了用户向应用授予后台位置信息权限的方式 以 Android 11 为目标平台且需要访问后台位置信息的应用 通过对权限请求方法的多次单独调用,逐步请求前台(粗略或精确)和后台位置权限。必要时,说明用户授予该权限所能得到的益处
详细了解 Android 11 中的后台位置信息访问权限
软件包可见性
Android 11 更改了应用查询同一设备上的其他已安装应用及与之互动的方式 以 Android 11 为目标平台且与设备上的其他已安装应用交互的应用 元素添加到应用的清单
详细了解软件包可见性
前台服务类型
Android 11 更改了前台服务访问摄像头和麦克风数据的方式 以 Android 11 为目标平台且在前台服务中访问摄像头或麦克风的应用 分别在访问摄像头数据和麦克风数据的服务中声明 cameramicrophone 前台服务类型
详细了解新的前台服务类型

一次性权限

在 Android 11,如果要求用户给你地理位置的权限时,用户会有一个仅限这一次(only this time) 的额外选项,表示用户只给你的应用一次这个权限。当用户下一次打开应用的时候,系统会再次询问权限。麦克风和摄像头也是一样,存在一次性权限权限。

image

位置权限的特殊性

Android 11 对位置权限增加了前台和后台的区别。Android 11 之前,应用只是询问用户,给或者不给权限。但如果是应用 针对 Android 11 (Target SDK Level = 30),应先询问用户有没有这个授权,然后用户同意这个授权之后,需要再询问用户,还需要一个在后台时获取地理位置的权限。

image

应用包可见性

从前如果我们使用 PackageManger.getInstalledPackages(),他就会告诉开发者,应用包的信息。但是如果是 target 30,就有点改变了。如果是通过 getPakcageInfo 获取自己应用的信息,是没有影响的;如果要找手机安装了哪些应用,这个行为就有改变了,它只会给你一个结果,这个结果就只有你的应用本身,还有一些系统的应用,其他的应用是看不见的。

image

分区存储

分区存储其实在 Android 10 已经推出了,但是去年推出的时候开发者还可以选择性采用。但 Android 11 中,开发者就必须遵守分区存储了。

那么分区储存是什么?应用里面如果有照片、视频等媒体文件,可以把它放到公有的空间,让其他的应用也可以访问我的文件,可以看我的视频,可以看到我的照片。但是其他私有文件都不允许其他应用访问,除非透过 FileProvider 等特别设置。

如果是使用分区存储的话,弹窗要求授权的时候,会看见是从前我们是要求一个储存所有文件的授权,现在变成了要求文件和媒体的授权。

image

READ_PHONE_STATE 变更

READ_PHONE_STATE 权限将只能获取电话相关的状态,不能获取电话号码。如需要获取电话号码,需要额外申请 READ_PHONE_NUMBERS 权限。

image

MAC 地址访问限制

image

功能和API

文本和输入(WindowInsetsAnimation

Android 11 引入了新的 API 以改进输入法 (IME) 的转换,例如屏幕键盘。这些 API 可让您更轻松地调整应用内容,与 IME 的出现和消失以及状态和导航栏等其他元素保持同步。

如需在聚焦至任何 EditText 时显示 IME,请调用 view.getInsetsController().show(Type.ime())。

如需隐藏 IME,请调用 view.getInsetsController().hide(Type.ime())。

通过调用 view.getRootWindowInsets().isVisible(Type.ime()) 检查 IME 当前是否可见。

view.setOnApplyWindowInsetsListener { view, insets ->
// 比如监听用户输入法是否弹出
}

无线调试

Android 11 支持通过 Android adb 从工作站以无线方式部署和调试应用。例如,可以将可调试的应用部署到多台远程设备,而无需通过 USB 实际连接您的设备,从而避免常见的 USB 连接问题(例如驱动程序安装方面的问题)。

在主动拍摄期间关闭通知提示音和振动

从 Android 11 开始,在主动使用相机时,您的应用可以使用 setCameraAudioRestriction() 以仅关闭振动、同时关闭声音和振动或都不关闭。

应用进程退出原因

Android 11 引入了 ActivityManager.getHistoricalProcessExitReasons() 方法,用于报告近期任何进程终止的原因。应用可以使用此方法收集崩溃诊断信息,例如进程终止是由于 ANR、内存问题还是其他原因所致。此外,还可以使用新的 setProcessStateSummary() 方法存储自定义状态信息,以便日后进行分析。

getHistoricalProcessExitReasons() 方法会返回 ApplicationExitInfo 类的实例,该类包含与应用进程终止相关的信息。通过对此类的实例调用 getReason(),可以确定应用进程终止的原因。例如,REASON_CRASH 的返回值表示应用中发生了未处理的异常。如果应用需要确保退出事件的唯一性,可以保留特定于应用的标识符,例如基于 getTimestamp() 方法的时间戳的哈希值。

Android Studio 4.0

Motion Editor

MotionLayout API 扩展了功能丰富的 ConstraintLayout ,来帮助开发者实现应用中复杂的动画效果。在Android Studio 4.0中,新的Motion Editor使此API的使用变得更加容易,Motion Editor可以用来创建,编辑和预览MotionLayout 动画。不再需要创建和修改复杂的xml文件,使用Motion Editor就可以生成,而且支持编辑约束集,过渡,关键帧和视图属性。而且如果想要查看编辑器创建的代码的话,只需要单击一下即可。同样方便的是,对于已经使用过ConstraintLayout的开发人员来说,IDE可以轻松地将其转换为MotionLayout。一个创建动画的效果可以参考下图。

image

Layout Inspector

在debug模式下运行你的应用,然后借助新的Layout Inspector工具可以查看你的应用当前显示的布局结构及数据显示,而且还可以查看视图的实时3D效果图来检查布局的层次结构。这个功能可以用来更好的检查开发过程中遇到显示问题。

image

可以通过菜单中的View > Tool Windows > Layout Inspector来打开Layout Inspector窗口。

Layout Validation

使用布局验证可以在多个不同尺寸,不同分辨率的屏幕上来比较UI的显示效果,预览布局,以调整到最佳的显示效果。

image

在Android Studio的右上角可以找到Layout Validation选项卡。

混淆代码的智能编辑器

在之前编写混淆代码时,大概都复制粘贴的比较多,而在AS 4.0中提供了智能编辑器功能,不但在编写混淆代码会有自动补全所有类,方法和字段功能,而且还有语法突出显示,错误检查和提醒等功能。

image

更多特性详见官方文档

你可能感兴趣的:(Android 11特性)