Android新版本特性以及注意事项

版权声明:本文为HaiyuKing原创文章,转载请注明出处!html

概述

了解新版本的特性仍是颇有必要的,为何这么讲呢?由于能够从应用市场对发布应用的目标API版本(targetSdkVersion值)的要求提及:android

  • 从 2018 年 8 月 1 日起,全部向 Google Play 首次提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发; 2018 年 11 月 1 日起,全部 Google Play 的现有应用更新一样必须针对 Android 8.0。
  • 2019年5月1日起应用宝本商城新上架应用应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。自2019年8月1日起,现有应用的更新应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。2018年9月1往后,未达到要求的应用,腾讯开放平台将逐步采用不推荐的策略2019年5月1往后,未达到要求的应用,腾讯开放平台将拒绝上架,2019年8月1往后,未达到要求的应用,腾讯开放平台将拒绝更新。web

  • 腾讯开放平台将在2018年3月21日启动Android P (API 等级 28) 版本应用适配检测工做。针对未适配Android P版本的应用,腾讯开放平台将在Android P版本机型上采起屏蔽或不推荐更新等策略。
  • 华为开发者联盟:自2019年5月1日起,华为应用市场新上架应用应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。自2019年8月1日起,现有应用的更新应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。2019年5月1往后,未达到要求的新应用,华为应用市场将拒绝上架。2019年8月1往后,未达到要求的现有应用,华为应用市场将拒绝更新。

而将targetSdkVersion的值修改为高版本,那么就表明在这个版本上的手机设备上已经进行了适配,好比Android8.0(API 26),那么就要考虑到适配应用图标的问题、还有通知栏适配等等。编程

各版本对应的API值

数据来源:https://developer.android.google.cn/about/dashboards/?hl=zh-cn安全

Android 4.4 KitKat(targetSdkVersion =19)

参考《Android 4.4 API网络

这里简单讲一下主要API变动,具体的请阅读上面的连接。app

外部存储空间访问权限

您的应用在 Android 4.4 上运行时没法读取外部存储空间上的共享文件,除非您的应用具备 READ_EXTERNAL_STORAGE 权限。也就是说,没有此权限,您没法再访问 getExternalStoragePublicDirectory() 返回的目录中的文件。可是,若是您仅须要访问 getExternalFilesDir() 提供的您的应用特有目录,那么,您不须要 READ_EXTERNAL_STORAGE 权限。框架

webview底层代码变化

WebView 类的底层代码和相关 API 已升级为基于现代的 Chromium 源代码快照。这会带来各类性能提高,同时为新的 HTML5 功能和远程调试 WebView 内容提供支持。这次升级的范围意味着若是您的应用使用 WebView,则在某些状况下其行为可能会受影响。尽管对已知的行为变动进行了记录,但仅在您将应用的 targetSdkVersion 更新为“19”或更高版本时这些变动才会对应用产生很大的影响—新的 WebView 在“兼容模式”中运行以便在面向 API 级别 18 和更低级别的应用中提供部分旧功能—您的应用有可能依赖来自之前的 WebView 版本的未知行为。ide

沉浸式全屏模式

要为您的应用提供填充整个屏幕的布局,适用于 setSystemUiVisibility() 的新标记 SYSTEM_UI_FLAG_IMMERSIVE(与 SYSTEM_UI_FLAG_HIDE_NAVIGATION 结合使用时)将启用新的沉浸式全屏模式。在启用沉浸式全屏模式后,您的 Activity 将继续接收全部触摸事件。用户能够沿着系统状态栏正常出现的区域向内滑动来显示系统状态栏。这将清除 SYSTEM_UI_FLAG_HIDE_NAVIGATION 标记(若是应用了 SYSTEM_UI_FLAG_FULLSCREEN 标记,也会清除该标记),所以系统状态栏保持可见状态。可是,若是您想要系统状态栏在片刻后再次隐藏,能够改用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 标记。函数

透明系统状态栏

如今,您可使用新主题背景 Theme.Holo.NoActionBar.TranslucentDecor 和 Theme.Holo.Light.NoActionBar.TranslucentDecor 将系统状态栏设置为部分透明。经过启用透明系统状态栏,您的布局将填充系统状态栏后面的区域,所以,您也必须为不该被系统状态栏覆盖的布局部分启用 fitsSystemWindows。

若是您要建立自定义主题背景,则将其中某个主题背景设置为父主题背景,或在您的主题背景中添加 windowTranslucentNavigation 和 windowTranslucentStatus 样式属性。

从Android4.4开始,才能够实现状态栏着色,而且从5.0开始系统更加完善了这一功能。

Android 5.0(targetSdkVersion =21)

参考《Android 5.0 API

这里简单讲一下主要API变动,具体的请阅读上面的连接。

Material Design 支持

Android 5.0 添加了对 Android 的新 Material Design 样式的支持。您能够建立具备 Material Design 功能的应用,实现动态视觉效果,利用其中的 UI 元素转换赋予用户天然的感受。此支持包括:

  • Material Design 主题
  • 视图阴影
  • RecyclerView、卡片CardView、Toolbar、FloatingActionButton、TextInputLayout、Snackbar、AppBarLayout、TabLayout、NavigationView
  • 可绘制动画和造型效果
  • Material Design 动画和 Activity 转换效果
  • 针对基于视图状态的视图属性的动画生成器
  • 可自定义的 UI 小部件和具备可由您控制的调色板的应用栏
  • 基于 XML 矢量图形的动画和非动画可绘制对象

通知

5.0加入了一种新的模式Notification的显示等级。
1.普通Notification
建立Builder 对象,添加各类属性,用PendingIntent 控制跳转,最后是建立NotificationManager调用notify方法。
2.折叠式Notification
用RemoteViews来建立自定义Notification视图。
3.悬挂式Notification(5.0新增)
调用setFullScreenIntent来将Notification变为悬挂式Notification。焦点不变,不会影响用户操做,显示几秒会自动消失。

Android 6.0(targetSdkVersion =23)

参考《Android 6.0 API

这里简单讲一下主要API变动,具体的请阅读上面的连接。

指纹身份验证

此版本提供了一些新的 API,在受支持的设备上,用户只需扫描其指纹便可完成身份验证,这些 API 还可与 Android 密钥库系统结合使用。

通知

此版本移除了 Notification.setLatestEventInfo() 方法。请改用 Notification.Builder 类来构建通知。要重复更新通知,请重复使用 Notification.Builder 实例。调用 build() 方法可获取更新后的 Notification 实例。

此版本针对通知功能引入了下列 API 变动:

  • 新增了 INTERRUPTION_FILTER_ALARMS 过滤级别,它对应于新增的“仅闹铃”免打扰模式。
  • 新增了 CATEGORY_REMINDER 类别值,用于区分用户安排的提醒与其余事件 (CATEGORY_EVENT) 和闹铃 (CATEGORY_ALARM)。
  • 新增了 Icon 类,您能够经过 setSmallIcon()方法和 setLargeIcon()方法将其附加到通知上。同理,addAction() 方法如今接受 Icon 对象,而不接受可绘制资源 ID。
  • 新增了 getActiveNotifications() 方法,让您的应用可以了解哪些通知目前处于活动状态。要查看使用此功能的应用实现,请参阅 ActiveNotifications 示例。

运行时权限

此版本引入了一种新的权限模式,现在,用户可直接在运行时管理应用权限。这种模式让用户可以更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。

对于以 Android 6.0(API 级别 23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要肯定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的 requestPermissions() 方法。即便您的应用并不以 Android 6.0(API 级别 23)为目标平台,您也应该在新权限模式下测试您的应用。

Android 7.0(targetSdkVersion =24)

参考《Android 7.0 开发者版本

这里简单讲一下主要API变动,具体的请阅读上面的连接。

FileProvider【经常使用于调起系统相机拍照返回图片路径、调用系统文件管理器返回文件路径】

传递软件包网域外的 file:// URI 可能给接收器留下没法访问的路径。所以,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider。

对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。若是一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此受权的最简单方式是使用 FileProvider 类。

多窗口支持

在 Android 7.0 中,咱们为该平台引入了一个新的并且很是须要的多任务处理功能 — 多窗口支持。

如今,用户能够一次在屏幕上打开两个应用。

通知加强功能

在 Android 7.0 中,咱们从新设计了通知,使其更易于使用而且速度更快。部分变动包括:

  • 模板更新:咱们正在更新通知模板,新强调了英雄形象和化身。开发者将可以充分利用新模板,只需进行少许的代码调整。
  • 消息传递样式自定义:您能够自定义更多与您的使用 MessagingStyle 类的通知相关的用户界面标签。您能够配置消息、会话标题和内容视图。
  • 捆绑通知:系统能够将消息组合在一块儿(例如,按消息主题)并显示组。用户能够适当地进行拒绝或归档等操做。若是您已实现 Android Wear 的通知,那么您已经很熟悉此模式。
  • 直接回复:对于实时通讯应用,Android 系统支持内联回复,以便用户能够直接在通知界面中快速回复短信。
  • 自定义视图:两个新的 API 让您在通知中使用自定义视图时能够充分利用系统装饰元素,如通知标题和操做。

多语言区域支持,更多语言

Android 7.0 如今容许用户在设置中选择多个语言区域,以更好地支持双语用例。应用可使用新的 API 获取用户选择的语言区域,而后为多区域设置用户提供更成熟的用户体验 — 如以多个语言显示搜索结果,而且不会以用户了解的语言翻译网页。

应用能够经过调用 LocaleList.GetDefault() 获取用户设置的语言区域列表。为支持扩展的语言区域数量,Android 7.0 正在改变其解析资源的方式。请务必使用新的资源解析逻辑测试和验证您的应用是否能如期运行。

Android 8.0(targetSdkVersion =26)

参考《Android 8.0 功能和 API

这里简单讲一下主要API变动,具体的请阅读上面的连接。

自适应图标(应用图标适配)

Android 8.0 引入自适应启动器图标。自适应图标支持视觉效果,可在不一样设备型号上显示为各类不一样的形状。

最大屏幕纵横比(为了全面屏适配)

以 Android 7.1(API 级别 25)或更低版本为目标平台的应用默认的最大屏幕纵横比为 1.86。针对 Android 8.0 或更高版本的应用没有默认的最大纵横比。若是您的应用须要设置最大纵横比,请使用定义您的操做组件的清单文件中的 maxAspectRatio 属性。

权限

一、Android 8.0 引入了多个与电话有关的新权限:

  • ANSWER_PHONE_CALLS 容许您的应用经过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可使用 acceptRingingCall() 函数。
  • READ_PHONE_NUMBERS 权限容许您的应用读取设备中存储的电话号码。

二、在 Android 8.0 以前,若是应用在运行时请求权限而且被授予该权限,系统会错误地将属于同一权限组而且在清单中注册的其余权限也一块儿授予应用。

对于针对 Android 8.0 的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则全部后续对该权限组中权限的请求都将被自动批准。

例如,假设某个应用在其清单中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。应用请求 READ_EXTERNAL_STORAGE,而且用户授予了该权限。若是该应用针对的是 API 级别 24 或更低级别,系统还会同时授予 WRITE_EXTERNAL_STORAGE,由于该权限也属于同一 STORAGE 权限组而且也在清单中注册过。若是该应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE;不过,若是该应用后来又请求 WRITE_EXTERNAL_STORAGE,则系统会当即授予该权限,而不会提示用户。

语言区域和国际化

Android 7.0(API 级别 24)引入能指定默认类别语言区域的概念,可是某些 API 在本应使用默认 DISPLAY 类别语言区域时,仍然使用不带参数的通用 Locale.getDefault() 函数。如今,在 Android 8.0 中,如下函数使用 Locale.getDefault(Category.DISPLAY) 来代替 Locale.getDefault():

容许安装未知来源应用

针对 8.0 的应用须要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限,不然将没法进行应用内升级。

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

通知

通知渠道:Android 8.0 引入了通知渠道,其容许您为要显示的每种通知类型建立用户可自定义的渠道。用户界面将通知渠道称之为通知类别。

Android 9.0(targetSdkVersion =28)

参考《Android 9 功能和 API

这里简单讲一下主要API变动,具体的请阅读上面的连接。

显示屏缺口支持(刘海屏适配)

Android 9 支持最新的全面屏,其中包含为摄像头和扬声器预留空间的屏幕缺口。 经过 DisplayCutout 类可肯定非功能区域的位置和形状,这些区域不该显示内容。 要肯定这些屏幕缺口区域是否存在及其位置,请使用 getDisplayCutout() 函数。

利用 Wi-Fi RTT 进行室内定位

Android 9 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time(RTT))的平台支持,从而让您的应用能够利用室内定位功能。

Crypto provider去掉了

已知影响的主要是AES加密,网上的一些没有添加对28版本号判断的工具类都是不可行的。建议换成官网的。

参考资料:https://blog.csdn.net/drkcore/article/details/69931654

Http网络请求

Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密链接,这意味着 Android P 将禁止 App 使用全部未加密的链接,所以运行 Android P 系统的安卓设备不管是接收或者发送流量,将来都不能明码传输,须要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

在Android P系统的设备上,若是应用使用的是非加密的明文流量的http网络请求,则会致使该应用没法进行网络请求,https则不会受影响,一样地,若是应用嵌套了webview,webview也只能使用https请求。

有如下三种解决方案

  • APP改用https请求
  • targetSdkVersion 降到27如下
  • 在 res 下新增一个 xml 目录,而后建立一个名为:network_security_config.xml 文件(名字自定) ,内容以下,大概意思就是容许开启http请求
<?xml version="1.0" encoding="utf-8"?>
<!-- 适配Android9.0 -->
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

而后在APP的AndroidManifest.xml文件下的application标签增长如下属性:

android:networkSecurityConfig="@xml/network_security_config"

参考资料:http://www.cnblogs.com/renhui/p/9921790.html

https://developer.android.google.cn/training/articles/security-config

通知

提高短信体验

渠道设置、广播和请勿打扰

多摄像头支持和摄像头更新

在运行 Android 9 的设备上,您能够经过两个或更多物理摄像头来同时访问多个视频流。] 在配备双前置摄像头或双后置摄像头的设备上,您能够建立只配备单摄像头的设备所不可能实现的创新功能,例如无缝缩放、背景虚化和立体成像。 经过该 API,您还能够调用逻辑或融合的摄像头视频流,该视频流可在两个或更多摄像头之间自动切换。

动画

Android 9 引入了 AnimatedImageDrawable 类,用于绘制和显示 GIF 和 WebP 动画图像。 AnimatedImageDrawable 的工做方式与 AnimatedVectorDrawable 的类似之处在于,都是渲染线程驱动 AnimatedImageDrawable 的动画。 渲染线程还使用工做线程进行解码,所以,解码不会干扰渲染线程的其余操做。 这种实现机制容许您的应用在显示动画图像时,无需管理其更新,也不会干扰应用界面线程上的其余事件。

参考资料

Android 新特性(5.0、6.0、7.0、8.0)

Android O 适配详细指南

相关文章
相关标签/搜索