安卓6.0(棉花糖)新特性汇总
安卓6.0(棉花糖)新特性汇总
Android伴随着众多新特性和新功能,Android6.0(API level 23)在系统和API上都有着诸多的改变。
1.App Permissions(软件权限管理) 在安卓6.0里,应用许可提示可以自定义了。它允许对应用的权限进行高度管理,比如应用能否使用位置、相机、麦克风、通讯录等,这些都可以开放给开发者和用户。 作为开发者,当你的app的目标版本(target)为Android6.0(API 23)或更高时,请确保在运行时进行权限的检查和请求。其中,新的方法checkSelfPermission()可以用来判断你的应用是否被授予了权限,而requestPermissions()可请求权限。即使你app的目标版本在android6.0以下,也应该在新的权限管理模型下测试你的应用。
2.Chrome Custom Tabs(网页体验提升) 新版的M对于Chrome的网页浏览体验进行了提升,它对登陆网站、存储密码、自动补全资料、多线程浏览网页的安全性进行了一些列的优化。Android.provider.Browser.getAllBookmarks() 和 android.provider.Browser.saveBookmark()方法被移除,同样的READ_HISTORY_BOOKMARKS和WRITE_HISTORY_BOOKMARKS权限也被移除。如果你app的目标版本是android6.0或更高,请不要访问全局的provider获取书签,而是应该在应用的内部保存书签数据。
3.App Links(APP关联) 安卓6.0加强了软件间的关联,谷歌在现场展示了 一个例子,比如你的手机邮箱里收到一封邮件,内文里有以个Twitter链接,用户点击该链接可以直接跳转到Twitter应用,而不再是网页。
4.Android Pay(安卓支付) Android支付统一标准,新的安卓6.0系统中集成了Android Pay,其特性在于简洁、安全、可选性。Android Pay是一个开放性平台,使用户就可以选择谷歌的服务或者使用银行的APP来使用它,Android Pay支持4.4以后系统设备,在发布会上谷歌宣布Android Pay已经与美国三大运营商700多家商店达成合作。支付功能可以使用指纹来进行支付,这意味着今年基于安卓M的Nexus产品肯定会有指纹识别了。
5.Fingerprint Support(指纹支持) 安卓6.0增加了对指纹的识别API,谷歌开始在M里自建官方的指纹识别支持,力求Android统一方案,目前所有的Android产品指纹识别都是使用非谷歌认证的技术和接口。 新特性六:Power & Change(电量管理 ) 新的电源管理模块将更为智能,比如Android平板长时间不移动时,安卓6.0M系统将自动关闭一些App。同时安卓6.0设备将支持USB Type-C接口,新的电源管理将更好的支持Type-C接口。
6.眠和应用待机模式(Doze and App Standby)
此次发布引入了新的省电优化方案,在设备和应用空闲时起作用。此特性影响所有的应用,请确保做好相应的测试。
休眠模式(Doze): 手机在没有外接电源且放置至屏幕关闭一段时间后,设备将进入休眠模式,它将使系统进入睡眠状态(sleep state)。在此模式下,设备周期性的短暂恢复正常操作,以使应用可以同步,系统执行一些必要操作。
应用待机模式(App Standby):在用户没有使用某应用的情况下,此模式允许系统判定此应用进入空闲状态。系统的判定依据则是用户在一定的时间内没有再点击此应用(译注:主要还是依据前台进程判定)。如果此时设备也没有连接充电器,系统将禁用该应用的网络连接、同步及任务调度。
了解更多关于省电方面的变化,可查看Optimizing for Doze and App Standby(Optimizing for Doze and App Standby)
7.移除Appache的HTTP Client(Apache HTTP Client Removal)
Android6.0版本移除了对Appache的HTTP client的支持。如果你的app的目标版本是Android2.3(API level 9)或者更高,请使用HttpURLConnection类进行替换。此类采用了透明压缩(transparent compression)和响应缓存(response caching),最小化电量消耗。如果你希望继续使用Appache Http API,请修改你的build.gradle文件,
增加如下:android {
useLibrary 'org.apache.http.legacy'
}
8.BoringSSL
Android正在将OpenSSL库替换为BoringSSL库。这将影响你的应用在NDK中所链接的加密库,比如libcrypto.so和libssl.so,它们不是NDK API的一部分。这些库不是公开的API,因此在不同版本和设备上的变化也不会及时通知开发者。而且,这也将暴露你应用的安全缺陷。因此,需要修改你的native代码,通过JNI的方式调用Java的加密API或者静态链接你选择的加密库.
9.获取硬件标识符(Access to Hardware Identifier)
在此版本中,为了更好的保护用户的数据,Android移除了从代码中通过Wi-Fi和蓝牙的API访问设备本地网络标识符。因此WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()将始终返回02:00:00:00:00:00
而为了能够通过Wi-Fi和蓝牙扫描时,获取周边设备的硬件标识符,应用必须具有ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION权限:
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
注意:当运行Android6.0(API level 23)的设备启动后台Wi-Fi或蓝牙扫描时, 此操作对外部设备是可见的,且被显示为一个随机MAC的地址。
10.通知(Notifications)
此版本移除了Notification.setLatestEventInfo()方法。用Notification.Builder类来构造通知,在需要反复更新通知的情况下,保存并重用Notification.Builder的实例;
在获取更新后的Notification实例时,调用其build()方法.
adb shell dumpsys notification命令不再输出你的通知文本,而adb shell dumpsys notification --noredact命令将输出一个notification对象的文本.
11.AudioManager Changes
此版本不再支持通过AudioManager类来直接对特定的音频流设置音量和静音,因此:setStreamSolo()方法过时(deprecated),替换调用requestAudioFocus()方法,
setStreamMute()方法过时,替换调用为adjustStreamVolume()方法,传入的值也变为ADJUST_MUTE 或 ADJUST_UNMUTE
12.文本选择(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模式。
此次,安卓6.0(Android M)新系统主要改进的地方就是,改善用户体验,修复BUG,提升了这个开放平台的整体质量,很多内容都得到了改善,相信从这些新特性中大家也能看到。