首先看看最新版本Android 11 :
https://www.zhihu.com/question/420186152
4.0
Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港发布。
安卓2.0版本安卓2.0版本
版本主要更新如下:
全新的UI;全新的Chrome Lite浏览器,有离线阅读,16标签页,隐身浏览模式等;截图功能;更强大的图片编辑功能;自带照片应用堪比Instagram,可以加滤镜、加相框,进行360度全景拍摄,照片还能根据地点来排序;Gmail加入手势、离线搜索功能,UI更强大;新功能People:以联系人照片为核心,界面偏重滑动而非点击,集成了Twitter、Linkedin、Google+等通讯工具。有望支持用户自定义添加第三方服务;新增流量管理工具,可具体查看每个应用产生的流量,限制使用流量,到达设置标准后自动断开网络。
4.1
Android 4.1Jelly Bean(果冻豆):2012年6月28日
新特性:
更快、更流畅、更灵敏;特效动画的帧速提高至60fps,增加了三倍缓冲;增强通知栏;全新搜索;搜索将会带来全新的UI、智能语音搜索和Google Now三项新功能;桌面插件自动调整大小;加强无障碍操作;语言和输入法扩展;新的输入类型和功能;新的连接类型。
4.2
Android 4.2 Jelly Bean 原生系统用户界面Android 4.2 Jelly Bean 原生系统用户界面
Android 4.2Jelly Bean(果冻豆):2012年10月30日
Android 4.2沿用“果冻豆”这一名称,以反映这种最新操作系统与Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具体如下:
Photo Sphere全景拍照功能;键盘手势输入功能;改进锁屏功能,包括锁屏状态下支持桌面挂件和直接打开照相功能等;可扩展通知,允许用户直接打开应用;Gmail邮件可缩放显示;Daydream屏幕保护程序;用户连点三次可放大整个显示频,还可用两根手指进行旋转和缩放显示,以及专为盲人用户设计的语音输出和手势模式导航功能等;支持Miracast无线显示共享功能;Google Now现可允许用户使用Gamail作为新的数据来源,如改进后的航班追踪功能、酒店和餐厅预订功能以及音乐和电影推荐功能等。
4.4
Android 4.4KitKat(奇巧巧克力): 2013年下半年
2013年9月4日凌晨,谷歌对外公布了Android新版本Android 4.4KitKat(奇巧巧克力),并且于2013年11月01日正式发布,新的4.4系统更加整合了自家服务,力求防止安卓系统继续碎片化、分散化。 [11]
5.0
Android 5.0Lollipop(棒棒糖):美国太平洋时间2014年10月15日
Android 5.0 系统使用一种新的Material Design设计风格。从图片上就能看到一些全新的设计。从图片上看,这套设计图对 Android 系统的桌面图标及部件的透明度进行的稍稍的调整,并且各种桌面小部件也可以重叠摆放。虽然调整桌面部件透明度对 Android 系统来说并不算什么新鲜的功能,但是加入了透明度的改进。界面加入了五彩缤纷的颜色、流畅的动画效果,呈现出一种清新的风格。采用这种设计的目的在于统一 Android 设备的外观和使用体验,不论是手机、平板还是多媒体播放器。
6.0
Android 6.0Marshmallow(棉花糖):2015年5月28日
新系统的整体设计风格依然保持扁平化的MeterialDesign风格。Android6.0在对软件体验与运行性能上进行了大幅度的优化。据测试,Android6.0可使设备续航时间提升30%。
7.0
Android 7.0Nougat(牛轧糖):2016年8月22日 [10] [12]
8.0
Android 8.0 Oreo(奥利奥):2017 年 8 月 21 日
9.0
Android 9.0 Pistachio Ice Cream(开心果冰淇淋):2017 年 8 月 21 日
野路子
android6.0、7.0、8.0新特性总结之开发应用时加以考虑的一些主要变更。
android6.0
参考一:简书Android 6.0 新特性详解
参考二:关于Android6.0以上系统的权限问题
参考三:值得你关注的Android6.0上的重要变化(一)
参考四:值得你关注的Android6.0上的重要变化(二)
参考五:Android从1.0到 6.0各版本的差别
参考六:Android历史版本 版本号对照 版本分布(截止到2017.11)
参考七:Android发展史(Android各版本特性-技术篇)(至android6.0)
参考八: 了解Android已发布的各种版本(即1.0、2.0、3.0、4.0、5.0、6.0、7.0、8.0)
参考九:Android中判断当前API的版本号
参考十:关于Android6.0权限适配的问题
参考十一:Android 6.0权限机制及开发流程详解
参考十二:Android6.0动态权限申请步骤以及需要注意的一些坑
参考十三:彻底解决Android6.0权限管理问题
android7.0
参考一:android 7.0新特性
参考二:Android7.0新特性,及Android N适配
参考三:Android7.0适配教程与心得
参考四:Android7.0适配(含实例)
参考五: Android 7.0 之拍照与图片裁剪适配
参考六:Android 7.0的适配问题,android.os.FileUriExposedException
参考七:项目android 6.0,7.0 版本适配问题
参考八:android app版本升级(DownloadManager、适配6.0、7.0)
参考九:Android N(Android 7.0)版本适配(开发者应该知道的一切新特性与新功能)
参考十:Android7.0新特性介绍(一)——多窗口支持
参考十一: Android7.0新特性介绍(二)——通知增强功能
参考十二:android7.0对开发有影响的变动
参考十三:Android7.0适配教程,心得
参考十四:Android 7.0
参考十五:Android 7.0 新特性详解
android8.0
参考一:开发者必看|Android 8.0 新特性及开发指南
参考二:安卓8.0和7.0有什么区别 8.0系统新功能盘点
参考三:Android 8.0有什么新功能?看看这个就够了
参考四: Android O (8.0) 新特性介绍
参考五:Android 8.0新特性(看这篇文章就够了)
参考六:Android 8.0 新特性有哪些?
参考七: Android8.0运行时权限策略变化和适配方案
参考八:值得你关注的Android8.0(Android O)上的重要变化
参考九:Android 8.0 功能和 API
参考十:公司项目Android8.0适配分析
参考十一:Android 8.0 功能和 API(developer.android.google.cn)
自己总结
android6.0新特性:
1-android6.0对应api级别为23;
2-android6.0版本引入了一种新的权限模式---运行时权限。
用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。
3-android6.0版本引入了针对空闲设备和应用的最新节能优化技术---休眠和应用待机模式(Doze and App Standby)
这些功能会影响所有应用,因此请务必在这些新模式下测试您的应用。
休眠模式(Doze):如果用户拔下设备的电源插头,并在屏幕关闭后的一段时间内使其保持不活动状态,设备会进入低电耗模式,在该模式下设备会尝试让系统保持休眠状态。在该模式下,设备会定期短时间恢复正常工作,以便进行应用同步,还可让系统执行任何挂起的操作。
应用待机模式(App Standby):应用待机模式允许系统判定应用在用户未主动使用它时处于空闲状态。当用户有一段时间未触摸应用时,系统便会作出此判定。如果拔下了设备电源插头,系统会为其视为空闲的应用停用网络访问以及暂停同步和作业。
要详细了解这些节能变更,请参阅对低电耗模式和应用待机模式进行针对性优化。
4-BoringSSL
Android正在将OpenSSL库替换为BoringSSL库。这将影响你的应用在NDK中所链接的加密库,比如libcrypto.so和libssl.so,它们不是NDK API的一部分。这些库不是公开的API,因此在不同版本和设备上的变化也不会及时通知开发者。而且,这也将暴露你应用的安全缺陷。因此,需要修改你的native代码,通过JNI的方式调用Java的加密API或者静态链接你选择的加密库。
5-文本选择(Text Selection)
用户在应用中选择文字后,你现在可以显示一个浮动工具栏(floating toolbar),展示并进行剪切、拷贝、粘贴操作,交互过程的实现和contextual action bar的实现一样( Enabling the contextual action mode for individual views)。
6-USB连接(USB Connection)
android6.0版本,通过UAB端口连接设备,默认采用仅充电模式。通过USB连接设备并获取内容,必须明确的经过用户授权这种交互权限。如果你的应用支持通过USB端口的交互,要考虑到这种交互必须被明确的启用。
7-Android 密钥库变更
android6.0版本开始,Android 密钥库提供程序不再支持 DSA。但仍支持 ECDSA。
停用或重置安全锁定屏幕时(例如,由用户或设备管理员执行此类操作时),系统将不再删除需要闲时加密的密钥,但在上述事件期间会删除需要闲时加密的密钥。
8-WLAN 和网络连接变更。
9-相机服务变更
android6.0中,相机服务中共享资源的访问模式已从之前的“先到先得”访问模式更改为高优先级进程优先的访问模式。
(1)客户端应用进程基于优先级的方式访问相机子系统,包括打开和配置设备相机。用户可见的应用进程通常被赋予高优先级,使得相机资源的获取和使用更可靠。
(2)高优先级的应用能够“驱逐”低优先级应用,而使用相机(译注:高优先级应用能以抢占方式使用相机)
(3)在有合适的相机的硬件上,多个应用进程可以同时且独立地使用相机设备。但是,多进程同时访问的情况下,会导致相机设备的性能显著降低,而现在相机服务会检测并不允许此种情况发生。这种变化导致低优先级的应用被“驱逐”,直到没有其它应用直接访问同一个相机设备。
(4)改变当前使用者(译注:多用户情况下的用户切换)后,引起之前使用者所拥有的应用无法再使用相机。访问相机被限制在设备的当前使用者上。实际上,这意味着一个“guest”用户账户在切换到其它用户账户时,不能再保留一个运行的进程访问相机服务。
10-APK 验证
该平台现在执行的 APK 验证更为严格。如果在清单中声明的文件在 APK 中并不存在,该 APK 将被视为已损坏。移除任何内容后必须重新签署 APK。
11-锁屏下语音搜索
用户可以直接在锁屏状态下进行语音搜索,虽然现在的一些安卓手机支持语音唤醒功能,但这些语音唤醒都是第三方厂商开发的,而此次的Android 6.0在系统层面加入锁屏下语音搜索,这无疑会在体验上有一个明显的提升。
12-指纹识别
说到指纹识别,很多用户都会觉得现在的中高端安卓手机都支持,但事实上这些安卓手机的指纹识别都是各个厂商自行开发的并没有系统底层的支持。Android 6.0则在系统层面加入指纹识别,能提供原生指纹识别API,这不但降低了厂商开发指纹识别模块的成本,最重要的是原生指纹识别将会大大提升安卓手机的指纹识别支付安全性。
13-Now on Tap功能
Now on Tap功能是和Google搜索紧密结合的功能,它可以让谷歌从任何应用中进行搜索。例如,在微信中聊天的时候提到餐馆,那么就可以在不跳转的情况下进行谷歌搜索。
14-App Links
通过App Links功能,Android平台能够向网络服务器提出申请,自主识别链接内容。直接跳转到App客户端中,改善用户体验,有利于让用户在体验更完善的App客户端完成更多操作。
此外,在Android 6.0谷歌还加入了Android Pay进一步强化移动支付,同时也是为了对抗Apple Pay。在发布会上谷歌表示Android 6.0将在下周开始推送,Nexus5/6/7/9以及Nexus Player将能够在第一时间得到升级。
15-很有必要说明的(笔者觉得和应用开发密切相关的)共两处,第一Android 2.3,,第二处是6.0 以后的版本了。
首先,Android2.3 与之前的系统有很大改进,具体是,增加nfc 支持,增加sip支持(在没增加这些之前,android开发者要开发nfc或者sip的相关应用的难度和增加之后完全不同,Android2.3 后写nfc 或sip相关程序比之前要容易得多 ),第二个改进是把输入法的框架改了(主要是将之前的java实现变为c实现),结果是2.3以后输入法的输入效率更高了。
至于6.0以后系统,第一开发工具只能用,谷歌官方的Android Studio 了。值得一提的是,从Android 4.4 开始,Android app 运行方式从原来的Dalvik 模式增加了一种可选模式 ART模式(全称是Android Runtime模式)。这种模式使得Android运行app的速度变快了(后面也有博客特别介绍)。还有就是从Android 5.0开始使用linux 3.0内核。这里就是多核处理器优化基础(因为linux内核中对于多核处理器进行了负载均衡处理)。
android6.0开发注意事项:
1-运行时权限检查(Runtime Permisssions)
作为开发者,当你的app的目标版本(target)为Android6.0(API 23)或更高时。
请确保在运行时进行权限的检查和请求。其中,
(1)新的方法checkSelfPermission()可以用来判断你的应用是否被授予了权限
(2)而requestPermissions()可请求权限。
即使你app的目标版本在android6.0以下,也应该在新的权限管理模型下测试你的应用。让你的应用支持新的权限管理模型,以及获得更多的官方提示,可查看Working with System Permissionss(https://developer.android.com/training/permissions/index.html)和 Permissions Best Practices(https://developer.android.com/training/permissions/best-practices.html#testing)
2-Android6.0版本移除了对Appache的HTTP Client(Apache HTTP Client Removal)
如果您的应用使用该客户端,并以 Android 2.3(API 级别 9)或更高版本为目标平台,
(1)请改用 HttpURLConnection 类,此 API 效率更高,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。
(2)如果要继续使用 Apache HTTP API,您必须先在 build.gradle 文件中声明以下编译时依赖项:
android {
useLibrary 'org.apache.http.legacy'
}
3-获取硬件标识符(Access to Hardware Identifier)
android6.0中,为了更好的保护用户的数据,
(1)Android移除了从代码中通过Wi-Fi和蓝牙的API访问设备本地网络标识符。因此WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()将始终返回02:00:00:00:00:00
(2)而为了能够通过Wi-Fi和蓝牙扫描时,获取周边设备的硬件标识符,应用必须具有ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION权限:
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
注意:当运行Android6.0(API level 23)的设备启动后台Wi-Fi或蓝牙扫描时, 此操作对外部设备是可见的,且被显示为一个随机MAC的地址。
4-BoringSSL
Android 正在从使用 OpenSSL 库转向使用 BoringSSL 库。
(1)如果您要在应用中使用 Android NDK,请勿链接到并非 NDK API 组成部分的加密库,如 libcrypto.so 和 libssl.so。这些库并非公共 API,可能会在不同版本和设备上毫无征兆地发生变化或出现故障。此外,您还可能让自己暴露在安全漏洞的风险之下。
(2)如果要链接到并非 NDK API 组成部分的加密库请改为修改原生代码(native),以通过 JNI 调用 Java 加密 API,或静态链接到您选择的加密库。
5-通知(Notifications)
(1)移除了Notification.setLatestEventInfo()方法。
(2)用Notification.Builder类来构造通知,在需要反复更新通知的情况下,保存并重用Notification.Builder的实例;在获取更新后的Notification实例时,调用其build()方法。
(3)adb shell dumpsys notification命令不再输出你的通知文本,而adb shell dumpsys notification --noredact命令将输出一个notification对象的文本。
6-AudioManager Changes
android6.0不再支持通过AudioManager类来直接对特定的音频流设置音量和静音,因此:
(1)setStreamSolo()方法过时(deprecated),替换调用requestAudioFocus()方法.
(2)setStreamMute()方法过时,替换调用为adjustStreamVolume()方法,传入的值也变为ADJUST_MUTE 或 ADJUST_UNMUTE。
7-文本选择(Text Selection)
用户在应用中选择文字后,你现在可以显示一个浮动工具栏(floating toolbar),展示并进行剪切、拷贝、粘贴操作,交互过程的实现和contextual action bar的实现一样( Enabling the contextual action mode for individual views)
实现选择文字后的浮动工具栏,在app代码中需要做如下修改:
(1)在View 或 Activity对象,ActionMode的调用从startActionMode(Callback) 变为 startActionMode(Callback, ActionMode.TYPE_FLOATING);
(2)替换原有的ActionMode.Callback为ActionMode.Callback2;
(3)重写OnGetContentRect()方法,提供内容Rect对象(文本选择的矩形框)在view中的位置;
(4)在矩形框作为唯一的元素不再有效时(矩形的定位不再有效),调用invalidateContentRect() 方法。
如果你在使用Android Support Library revision 22.2,需要注意浮动工具栏不向后兼容且因为appcompat默认接管ActionMode对象,阻止了浮动工具栏被显示。为了在AppCompatActivity中支持ActionMode,需要调用getDelegate()方法,之后对返回的AppCompatDelegate对象调用setHandleNativeActionModesEnabled()方法,并设置输入参数为false,该调用将ActionMode对象的控制交还给系统框架层。在Android6.0(API level 23)的设备上,框架层支持ActionBar或浮动工具栏模式,在Android 5.1(API level 22)及以下的设备上,只支持ActionBar模式。
8-浏览器书签变化(Browser Bookmark Changes)
android6.0移除了全局书签的支持。
(1)android.provider.Browser.getAllBookmarks() 和 android.provider.Browser.saveBookmark()方法被移除;
(2)同样的READ_HISTORY_BOOKMARKS和WRITE_HISTORY_BOOKMARKS权限也被移除。
(3)如果你app的目标版本是android6.0或更高,请不要访问全局的provider获取书签,而是应该在应用的内部保存书签数据。
9-Wi-Fi和网络变化(Wi-Fi and Networking Changes)
android6.0在Wi-Fi和网络API执行行为上有如下的变化
(1)现在,你的app只能修改你自己创建的WifiConfiguration对象的状态,而不再允许修改或删除由用户或其它app创建的WifiConfiguration对象;
(2)之前,应用可以使用enableNetwork(),设置disableAllOthers=true,来使设备断开其它网络,如蜂窝网络,而强制连接指定的Wi-fi网络。在此版本上,设备将不会从其它网络断开连接。如果你的app的targetSdkVersion是20或者更低,将固定在选择的Wi-Fi网络。如果targetSdkVersion是21或者更高,使用multinetwork APIs (如openConnection(), bindSocket()和bindProcessToNetwork()方法)来保证网络流量被发送到指定的网络上。
10-企业Android的变化(Android for Work Changes)
此版本Android for Work包括一下行为的变化:
个人环境中的企业联系人:当用户查看过去的通话记录时,Google拨号器的通话记录显示企业联系人(work contacts)。设置setCrossProfileCallerIdDisabled()为true,在Google拨号器中隐藏企业联系人的通话记录。默认情况下,在设备上通过蓝牙分享联系人时,企业联系人与个人联系人一起显示,除非设置setBluetoothContactSharingDisabled()为false。
Wi-Fi配置移除:通过Profile Owner添加的Wi-Fi配置(例如,调用addNetwork()方法)在其对应的企业配置(work profile)被移除后删除。
Wi-Fi配置锁定:当WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN值为非0时,用户无法修改或删除由启用的设备拥有者(Device Owner)创建的任何Wi-Fi配置。用户依然能够创建或修改他们自己的Wi-Fi配置。启用的设备拥有者拥有编辑或移除任何的Wi-Fi配置,即使这些配置不是它创建的。
通过Google账户添加的下载企业策略控制器(Work Policy Controller):在管控环境之外,当需要进行管理的Google账号要求通过企业策略控制器(WPC)app添加到设备时,新增账号流程会提示给用户去安装合适的WPC。这一行为对通过设置>账号和初始化设备时添加的账号同样起作用。
DevicePolicyManager API的变化:
(1)调用setCameraDisabled()方法,仅影响当前调用相机的用户;在managed profile中调用此方法并不影响primary user中使用相机的app运行。
(2)此外,setKeyguardDisabledFeatures()方法对配置拥有者(Profile Owner)和设备拥有者都可用。
(3)配置拥有者能够设置如下的锁屏限制:
KEYGUARD_DISABLE_TRUST_AGENTS 和 KEYGUARD_DISABLE_FINGERPRINT, 影响配置父用户(parent user)的锁屏设置
KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS, 仅影响在managed profile中应用产生的通知。
(4)createAndInitializeUser() 和 createUser()方法被废弃(deprecated)
(5)当给定的应用在前台时,setScreenCaptureDisabled()方法阻塞辅助框架(assist structure)
(6)EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM 默认为SHA-256. SHA-1 作为兼容性的备用,但未来将会被删除。
(7)EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM 目前只接受SHA-256。
(8)存在与Android6.0(API level 23)的Device initializer APIs现在被移除。
(9)EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS被移除,因此,NFC触碰配置不能在代码上解锁一个恢复出厂设置被保护的设备。
(10)现在可以使用EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE在managed device上通过NFC触碰传递数据给device owner app
(11)Android for Work API在M的运行时权限上进行了优化,包括企业配置(Work profiles),辅助层(assist layer)等。新的DevicePolicyManager 权限API并不影响Android M之前的应用。
(12)当用户在初始化设置流程中通过ACTION_PROVISION_MANAGED_PROFILE 或 ACTION_PROVISION_MANAGED_DEVICE intent退出同步部分,系统将会返回RESULT_CANCELED这一返回值。
11- 其它API的变化:
数据流量统计(Data Usage):android.app.usage.NetworkUsageStats类被重命名为NetworkStats。
全局设置变化:
(1)这些配置不再能通过setGlobalSettings()来设置:
BLUETOOTH_ON
DEVELOPMENT_SETTINGS_ENABLED
MODE_RINGER
NETWORK_PREFERENCE
WIFI_ON
(2)这些配置现在能通过setGlobalSettings()来设置:
WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN
Android 9.0 新特性
Google于2018年3月8日悄无声息的推送了Android P,不出意外的话这也将是Android 9.0的代号。接下来一起看看在这次更新中有哪些新功能吧。
本文参考:Google Developer
新特性
室内WIFI定位
“刘海”屏幕支持
通知
增强体验
通道设置、广播以及免打扰
多相机支持和相机更新
新的图片解码
动画
HDR VP9视频,HEIF图像压缩和媒体API
JobScheduler中的数据成本敏感度
神经网络API 1.1
改进表单自动填充
安全增强
Android 备份加密
写在最后
新特性
室内WIFI定位
Android P增加了对RTT Wi-Fi协议的支持,以此作为室内定位的基础。
在支持硬件支持的Android P设备上,开启定位并且打开WIFI扫描后就可以使用该功能进行定位。应用可以测量与附近支持RTT的Wi-Fi接入点(AP)的距离。设备必须启用位置并启用Wi-Fi扫描(在设置>位置下)。使用这个功能不会连接到WIFI,而且为了保持隐私,只有手机能确定AP到设备的距离,反之则不能。
如果设备测量到3个或更多AP的距离,则可以使用多点定位算法来估算最适合这些测量值的设备位置。其结果通常可以精确到1至2米范围。
//注:该处在2018.3.8的版本中还有bug,WIFI_RTT_RANGING_SERVICE没有添加到@ServiceName标记中
WifiRttManager wifiRttManager = (WifiRttManager) getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint();
builder.addWifiAwarePeer();
wifiRttManager.startRanging(builder.build(), () -> {...}, new RangingResultCallback{...});
该功能API在android.net.wifi.rtt下。
“刘海”屏幕支持
Android P 支持了手机屏幕是不规则形状时的获取(主要是应对刘海屏吧)。可以使用类似windowInsets.getDisplayCutout()来获取一些你想要的信息。
//您可以在自己的View中获取到不应该绘制的部分屏幕
getRootWindowInsets().getDisplayCutout().getBounds();
getRootWindowInsets().getDisplayCutout().getSafeInsetBottom();
getRootWindowInsets().getDisplayCutout().getSafeInsetLeft();
getRootWindowInsets().getDisplayCutout().getSafeInsetRight();
getRootWindowInsets().getDisplayCutout().getSafeInsetTop();
//也可以设置Window的属性
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
通知
Android P还增加了许多对通知的支持。
增强体验
从Android 7.0开始,就优化了Android通知栏的体验。
在P当中,又新增了下述功能:
支持图像:Android P现在在手机上的消息通知中显示图像。您可以在消息上使用setData()来显示图像。
会话参与者的简化支持:新的Notification.Person类用于标记参与聊天的人,包括他们的头像和URI。还有其他的一些API,现在都用Person类作为标志参数而不是CharSequence。
Notification.Builder builder = new Notification.Builder(this, "a");
//新的聊天对象
Notification.Person p = new Notification.Person();
//在MessagingStyle中用Person代替了以往的CharSequence
Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);
Notification.MessagingStyle.Message message = new Notification.MessagingStyle.Message("aaa", 100, p);
//可以显示图像了
message.setData();
messageStyle.addMessage(message);
builder.setStyle(messageStyle);
Notification notification = builder.build();
将回复另存为草稿:当用户无意中关闭消息通知时,您的应用可以检索系统发送的EXTRA_REMOTE_INPUT_DRAFT来获取一些信息。
确定对话是否是群组对话:您可以使用setGroupConversation()来有目的地将对话标识为群组对话或非群组对话。
为意图设置语义动作:setSemanticAction()方法允许您为某个动作提供语义含义,如标记为读取,删除,回复等。
SmartReply
通道设置、广播以及免打扰
Android O引入了Notification Channels,可让您为要显示的每种类型的通知创建一个用户可自定义的频道。 Android P通过以下更改简化了通知渠道设置:
阻止渠道:用户现在可以在应用的通知设置中阻止整组渠道。您可以使用isBlocked()方法来确定某个组何时被阻止,不对被阻止的组发送消息。
此外,您的应用可以使用新的getNotificationChannelGroup()方法查询当前渠道设置。
新的广播类型:Android系统现在在通知频道和频道组的阻塞状态发生变化时发送广播。拥有被阻止的频道或群组的应用可以监听这些Intent并作出相应的反应。有关这些Intent的更多信息,请参阅NotificationManager参考中更新后的常量列表。有关对广播Intent作出反应的信息,请参阅广播。
新的免打扰优先级类别:NotificationManager.Policy有两个新的策略常量:PRIORITY_CATEGORY_ALARMS(按优先级排列)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER(优先排列媒体,系统和游戏声音)
多相机支持和相机更新
现在,可以同时从两个或更多的物理摄像头同时获得数据流。在具有双前置或双后置摄像头的设备上,可以实现无法使用单个摄像头实现的功能,例如无缝缩放,散景 ,和立体视觉。 该API还允许您调用合理的或者融合的相机流,以便在两台或更多台相机之间自动切换。
相机的其他改进包括新的android.hardware.camera2.params.SessionConfiguration,有助于减少初始捕捉期间的延迟。而Surface共享可让相机客户端处理各种使用情况,而无需停止和启动相机流式传输。 此外还添加了基于显示的闪光灯支持的API。
Android P还支持支持deveices上的外部USB / UVC相机。
新的图片解码
Android P新增了ImageDecoder类,为解码图像提供了一种更优的方法。由此可以用ImageDecoder来替换BitmapFactory和BitmapFactory.Options。更多使用方法请参见官方API。
String filePath = "test";
File file = new File(filePath);
ImageDecoder.Source source = ImageDecoder.createSource(file);
ImageDecoder.decodeBitmap(source);
ImageDecoder.decodeDrawable(source, (imageDecoder, imageInfo, source1) -> {
//裁剪图像
imageDecoder.setCrop();
//调整大小
imageDecoder.setResize();
});
BitmapFactory.decodeFile(filePath);
动画
Android P引入了一个新的AnimatedImageDrawable类来绘制和显示GIF和WebP动画图像。 AnimatedImageDrawable与AnimatedVectorDrawable类似,因为AnimatedImageDrawable动画也是基于RenderThread工作的。 RenderThread本身在内部使用工作线程进行解码,因此解码不会干扰RenderThread。 这种实现允许您的应用拥有动画图像,而无需管理其更新或干扰应用的UI线程。
Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
// Prior to start(), the first frame is displayed
((AnimatedImageDrawable) d).start();
}
HDR VP9视频,HEIF图像压缩和媒体API
Android P增加了对HDR VP9 Profile 2的内置支持。
Android P支持HEIF图像(隔壁IOS在2017年10月推的新的图片编码)编码。
Android P还引入了MediaPlayer2。该播放器支持使用DataSourceDesc构建的播放列表。
MediaPlayer2.create();
注:笔者对图像/视频编解码方面不甚了了,有兴趣的可以自行参阅API。
JobScheduler中的数据成本敏感度
在Android P当中,JobScheduler得到了改进,使其能够更好地为用户处理与网络相关的工作,并配合运营商分别提供网络状态信号。
Jobs现在可以定义出其估计的数据大小,预取信号,并指定详细的网络要求 - 运营商可以将网络报告为拥塞或不用流量计费的。然后,JobScheduler根据网络状态管理工作。例如,当网络拥塞时,JobScheduler可能推迟大型网络请求。在不用流量计费的的网络上时,JobScheduler可以预读来改进用户体验。
神经网络API 1.1
对神经网络API新增了9个功能:Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub, and Squeeze。
改进表单自动填充
Android 8.0(API26)引入了自动填充框架,这使得在应用中填写表单变得更加容易。 Android P引入了自动填充服务并实现了多项改进,以在填写表单时进一步增强用户体验。 有关更多详细信息,请参阅自动填充框架。
注:该自动填充框架笔者应是Google服务中的内容,国内用户可能会体验不到(或许有厂商自己的版本)。
安全增强
Android P引入了许多新的安全功能,包括统一的指纹验证对话框和敏感交易的高确信度的用户确认。 有关更多详细信息,请参阅安全更新页面。
Android 备份加密
Android P支持使用客户端密钥对Android备份进行加密。 这项隐私措施,需要设备的PIN,图案密码或标准密码才能从用户设备备份的数据中恢复数据。
要了解有关在Android设备上备份数据的更多信息,请参阅数据备份概述。
注:据笔者所知,国内厂商基本都做了自己的备份系统(或者和其他大厂合作),所以没兴趣的同学散了吧。
总结
Android 5.0
1,扁平化的开始
2,Dvk被Art替换
Android 6.0
1,动态权限管理
2,指纹识别
3,电源管理
4,移除了了httpClient
Android 7.0
1,分屏多任务
2,Android有popupwindow显示bug
Android 8.0
1,画中画
2,通知
3,自适应图标
4,后台进程限制
5,特殊访问权限
Android 9.0
1,刘海平支持
https://blog.csdn.net/haovip123/article/details/54618642
https://blog.csdn.net/lzllzllhl/article/details/76889957
https://blog.csdn.net/GenlanFeng/article/details/79496359
写在最后
本文主要是针对Developer的新特性,以上如有各种纰漏欢迎各位在评论区指出,笔者会不定时/根据Android API更新而更新。也欢迎各位同学使用新的API,帮助我们OS的进步。
原文地址:https://blog.csdn.net/GenlanFeng/article/details/79496359
原文地址:https://www.cnblogs.com/JLZT1223/p/8108783.html
原文地址:https://blog.csdn.net/lovelyprogrammer/article/details/80752003
————————————————
Material Design在主题样式的使用:
作为我们开发者,最关心的还是如何在项目中使用Material Design风格:
设置应用的 targetSdkVersion 和 targetSdkVersion 为21
在values目录下的style资源文件中创建一个style,让其继承自 android:Theme.Material
在AndroidManifest中指定应用的主题或者Activity的主题为我们设定的样式
谷歌官方我们提供了三种配色风格的Material Design样式:
黑色主题 Theme.Material
明亮主题 Theme.Material.Light
明亮主题黑色ActionBar Theme.Material.Light.DarkActionBar
我们也可以继承系统提供的Material Design样式,进行配色修改:themecolor
画中画
Android O中,谷歌更加强调多任务处理场景中的流畅性,在I/O2017上,谷歌演示了增强功能的画中画模式,为用户带来不同应用程序间的流畅操作体验。例如用户可以在Netflix上观看电影,支持将电影屏幕缩小成悬浮窗口,在看电影的同时进行查看日历、搜索信息等其他工作,这和普通的画中画分屏模式并不相同。这一功能的唤醒只需要点击Home键按钮,如果想结束这一模式,可以将小窗口滑下来以终止。
Notification Dots
在Android O之前,使用安卓手机的用户,想要看到哪些应用程序推送了通知,可能只有在下拉通知中心中看到,但在Android O中,谷歌对安卓的通知功能做出了改进,这就是全新的Notification Dots功能,它是位于应用程序图标之上的小小的循环点,只有当应用出现未读通知时,它才会出现。这时候长按应用程序图标,就会以类似气泡的形式快速预览。而在通知中心中删除这些未读通知,应用图标上的标记点也会消失。
自动填充(Auto-Fill)
对于用户设备上最常用的应用,Android O将会帮助用户进行快速登录,而不用每次都填写账户名和密码。例如当用户使用一个新设备时,可以从Chrome中提取已经保存的账户名和密码,选择之后,自动填充功能便可以在本地进行,适用于你可能用到的大多数应用程序。开发人员也需要对其应用程序进行优化,让其应用程序能够和自动填充功能更好地兼容。
自适应图标(Adaptive icons)
Adaptive icons也是一项有趣的新功能,谷歌正在尝试整理Android中不一致的应用程序图标形状,这一功能为应用程序开发人员提供了适应其显示设备的每个图标的多个形状模板。因此,如果你的手机默认应用程序图示形状是圆角正方形,那么所有应用程序的图标都将是这个形状(前提是开发人员使用了这一功能)。也就是说,你将不再看到系统主屏上方形图标和圆形图标混合在一起的现象。
后台进程限制
谷歌表示一直在优化安卓Android的后台应用限制策略,以最大程度减小后台应用对电池的消耗和对资源的占用。在Android O的更新中,当应用被置入后台后,Android O将自动智能限制后台应用活动,主要会限制应用的广播、后台运行和位置,但应用的整体进程并没有被杀掉。不过,部分层级比较重要的应用可以不受限制,但总的来说,Android O将严格限制后台进程对手机资源的调用。
运行时权限策略变化
例如,假设某个应用在其清单中列出READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
。应用请求READ_EXTERNAL_STORAGE
,并且用户授予了该权限,如果该应用针对的是API级别24或更低级别,系统还会同时授予WRITE_EXTERNAL_STORAGE
,因为该权限也属于STORAGE权限组并且也在清单中注册过。如果该应用针对的是Android O,则系统此时仅会授予READ_EXTERNAL_STORAGE
,不过在该应用以后申请WRITE_EXTERNAL_STORAGE
权限时,系统会立即授予该权限,而不会提示用户。
消息通知的改进
在 Android P 中,我们特别重视改进通知的可视性和功能性。全新的 MessagingStyle 通知突出强调了来信人以及您可采用的回复方式。您可以显示对话,附加照片和表情,甚至使用智能回复。