Android 6.0(API级别23)包括各种系统变化和API的行为变化
2016-09-20 17:02
260 查看
Android 6.0 中新的新技术
最近 Google 正式发布了 Android M,并命名为“棉花糖”(Marshmallow),对于开发者来说,有哪些新的技术和变化呢?本文尝试总结一下 Android 6.0(API 23)给开发者带来新的技术和改变。
权限管理
权限管理是 Android M 最大的改变,权限管理更加精细,并且由以前的安装时静态授权,改为现在的运行时动态授权。大家对 Android 的权限吐槽已久,Android 应该能极大的改善这方面的问题。主要改变有:系统设置中可以对 APP 各个权限单独控制
权限根据内容进行分组了
普通权限还是在安装时授权
其他权限在运行时系统弹窗授权,并且要解析使用这个权限的目的
对于开发者来说,需要小心处理权限相关的问题。在使用某个功能的时候,需要总是判断是否有改权限,并且通过合适的方式请求用户授权。关于 Android M 权限的处理,可以参考官方文档。
另外,这篇文章结合图文和代码讲述了 Android M 中权限模型,比较清晰,可以参考一下。
APP Linking
这是一个把 APP 和网页直接打通的技术,能够让 APP 能够直接来处理你的网站普通的 URL 链接,来展示你对应的网站内容。这绝对是一个值得关注的改进,Web 和 APP 之间缝隙将越来越小。这对既有网站又有 APP 的应用来说非常有利,例如知乎和淘宝等。有点类似于之前的 APP 的 Deep link,可以通过特殊的 Schema 也可以让 APP 直接打开对应的内容。APP Linking 的特点是,只要使用传统的 URL 就可以,而且是根据 URL 的域名对应特定的 APP 的。
开发者需要做的是在
AndroidManifest.xml做一下对应的声明即可。如果需要让系统默认用你的
APP 打开对应的 URL 的话,还需要网站配合提供
assetlinks.json。详情可以参考这里。
APP 数据自动备份
支持 APP 数据自动备份到 Google Drive,在你换手机的时候,能够直接把 APP 的数据恢复到你的手机上,你还可以配置些数据那些数据需要或者不需要备份。而且不用写任何代码就自动实现了。详情可以参考这里。然而这些对国内的开发者来说,并没有什么用。国内厂商的 ROM 有些已经有或者准备会跟上,到时候都能享受到这样的便利。
指纹解锁
Android 官方支持指纹认证,可以用在解锁,或者任何需要验证用户的地方,例如支付。提供了新的 API FingerprintManager,让第三方
APP 来用来获得指纹认证的功能。具体使用方法可以参考这个实例。
直接分享
直接分享是在 APP 内直接弹出一个选择分享到其他应用的中的对象的列表,中间省略了选择需要分享的 APP,选择“联系人”之类的操作。Android 中分享已经做得很好了,这里又更进一步简化了分享操作。如果要让你的 APP 支持被直接分享,需要实现一个 ChooserTargetService,并且实现对应的处理分享
Intent 的 Activity。具体使用可以参考这里。
支持蓝牙触控笔
系统内置支持蓝牙触控笔,这样 Android 系统就默认支持高大上的触控笔了。并提供了 API 让你的 APP 来响应触控笔事件。
低功耗蓝牙扫描优化
优化了低功耗蓝牙扫描优化的扫描。现在低功耗蓝牙的应用越来越多,很多 APP 都需要扫描设备,扫描设备是一个非常重的操作,希望这次改动,能够带来一些改善。
支持主题化的 ColorStateLists
使用 context.getColorStateList(int id)来获取当前主题对应的
ColorStateLists。
相机 API
提供 API setTorchMode()来直接开关闪光灯,并且可以监听闪光灯的开光状态,以前很多
APP 已经支持用闪光灯来做手电筒,现在官方提供 API 来做这样的事情了。
从 Android 5.0 开始,就提供了一套全新的相机 API
Camera2,这里在此基础上添加了处理相关
API。
其他
另外还有很多的改进,因为涉及的方面太专业,或者是没有使用到相关功能,我就不详细说了,可以参考官方概述:有语音交互 API
Hotspot 2.0 支持
4k 屏支持
语音和视频 API
的改进
Android 企业用户特性,例如多用户支持,静默安装等
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
(以下为网页自动翻译)
随着新的特性和功能,Android 6.0(API级别23)包括各种系统变化和API的行为变化。本文强调一些关键的变化,你应该理解和考虑在你的应用程序。如果你有以前发表的Android应用程序,请注意,这些变化在影响你的应用程序平台。
1.运行时的权限
这个版本引入了一个新的权限模型,用户现在可以在运行时直接管理应用程序的权限。这个模型提供了改进的可见性和控制用户权限,同时简化安装和自动升级过程对于应用程序开发人员。用户可以授予或撤销权限单独安装的应用程序。 在你的应用程序的目标Android 6.0(API级别23)或更高,确保在运行时检查和请求权限。来确定应用程序已经被授予权限,调用新的checkSelfPermission()方法。请求权限,调用新的requestPermissions()方法。即使你的应用程序并不是针对Android
6.0(API级别23),你应该测试你的应用在新的权限模型。有关支持新的权限模型在你的应用程序,使用系统权限。对如何评估对应用程序的影响,看到权限最佳实践。
2.Doze与App Standby
这个版本引入了新的节能优化闲置设备和应用程序。这些特性影响所有应用程序确保测试您的应用程序在这些新模式。
Doze:如果用户拔掉设备,让它静止不动的,与它的屏幕,在一段时间内,该设备进入休睡模式,它试图保持系统处于睡眠状态.在这种模式下,设备周期性地短暂恢复正常操作的时间,以便应用程序同步发生,系统可以执行任何悬而未决的操作。
App Standby:应用备用允许系统确定应用程序空闲当用户不积极使用它。系统使这一决心当用户不接触一段时间的应用。如果设备不插电,系统禁用网络访问和暂停同步应用程序认为空闲和工作。
3.Apache HTTP客户端删除
Android 6.0版本将支持Apache HTTP客户端。如果你的应用程序使用此客户端和目标Android 2.3(API级别9)或更高,使用HttpURLConnection类。
这个API是更有效的,因为它通过透明的压缩和响应缓存,减少网络使用和减少能耗。继续使用Apache HTTP api,你必须首先声明以下编译时依赖项。gradle文件:
android {
useLibrary 'org.apache.http.legacy'
}
4.BoringSSL
Android是BoringSSL远离OpenSSL库。如果你在你的应用程序,使用Android NDK对加密库不是不联系NDK API的一部分,比如libcrypto。所以,libssl.so。这些库不是公共api, 并可能改变或打破跨版本和设备不另行通知。此外,你可能会暴露自己的安全漏洞。相反,修改您的本机代码调用Java加密api通过JNI或静态链接对您选择的密码库。
5.访问硬件标识符
为用户提供更大的数据保护,开始在本版本中,Android将编程访问设备的本地硬件标识符使用wi - fi和蓝牙api的应用程序。BluetoothAdapter.getAddress
WifiInfo.getMacAddress()和()方法返回02:00:00:00:00:00恒定值。
访问硬件标识符附近的外部设备通过蓝牙和无线网络扫描,应用程序必须现在ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION权限:
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
注意:当设备运行Android 6.0(API级别23)发起一个背景wi - fi或蓝牙扫描,操作是可见的外部设备,来自一个随机的MAC地址。
6.Notifications
这个版本删除Notification.setLatestEventInfo()方法。使用通知。构建器类来构建通知。反复更新通知,通知重用。构建器实例。调用build()方法来获取更新通知实例。
亚行壳dumpsys通知命令不再打印出你的通知文本。使用亚行壳dumpsys通知——noredact命令而不是打印的文本通知对象。
7.AudioManager Changes
设置音量直接或通过AudioManager静音特定流类是不再支持。setStreamSolo()方法是弃用,你应该调用requestAudioFocus()方法。同样,setStreamMute()方法是弃用; 相反,称为adjustStreamVolume()方法并传递价值ADJUST_MUTE或者ADJUST_UNMUTE的方向
8.Text Selection
当用户选择文本在你的应用程序,现在您可以显示文本选择行为,如剪切、复制和粘贴在一个浮动工具栏。用户交互实现类似于上下文操作栏,使所述上下文动作模式为个人观点。
实现浮动工具栏的文本选择,在你现有的应用程序做以下更改:
在你的视图或活动对象,改变你ActionMode startActionMode打来(回调)startActionMode(回调,ActionMode.TYPE_FLOATING)。
把你现有的ActionMode的实现。回调,让它延长ActionMode。Callback2代替。
覆盖onGetContentRect()方法提供的坐标内容矩形对象(如文本选择矩形)的观点。
如果矩形定位不再是有效的,这是唯一的元素失效,称之为invalidateContentRect()方法。
如果您使用的是Android支持库版本22.2,请注意,浮动工具栏不向后兼容和appcompat需要控制ActionMode默认对象。
这可以防止浮动工具栏显示。以AppCompatActivity启用ActionMode支持,叫getDelegate(),然后调用setHandleNativeActionModesEnabled()
返回的AppCompatDelegate对象和输入参数设置为false。这个调用返回控制ActionMode对象的框架。在设备运行Android
6.0(API级别23),
允许框架支持ActionBar或浮动工具栏模式,在设备上运行Android 5.1(API级别22)或更低,只有ActionBar模式支持。
9.Browser Bookmark Changes
这个版本将支持全球书签。android.provider.Browser.getAllBookmarks()和android.provider.Browser.saveBookmark()方法现在移除。
同样,READ_HISTORY_BOOKMARKS,WRITE_HISTORY_BOOKMARKS权限删除。
如果你的应用目标Android 6.0(API级别23)或更高,不从全球供应商访问书签书签或使用权限。相反,应用程序应该在内部存储书签数据。
10.Android Keystore Changes
有了这个版本,安卓不再支持DSA密钥库提供者。ECDSA仍支持。
键,不需要加密不再禁用安全锁定屏幕或重置时删除(例如,由用户或设备管理员) 。keys需要加密在这些事件将被删除。
11.Wi-Fi and Networking Changes
这个版本引入了以下行为改变无线和网络api。
您的应用程序现在可以改变WifiConfiguration对象的状态只有在您创建这些对象。你不允许修改或删除WifiConfiguration对象创建的用户或其他应用程序。
以前,如果一个应用程序迫使设备连接到一个特定的wi - fi网络通过使用enableNetwork与disableAllOthers = true()设置,设备与其他诸如蜂窝数据网络。
在本版本中,设备不再从其他网络断开。如果你的应用的targetSdkVersion“20”或更低,这是固定在选定的wi
- fi网络。
如果你的应用的targetSdkVersion“21”或更高,使用multinetwork api(比如openConnection(),bindSocket(),和新bindProcessToNetwork()方法),以确保其网络流量所选网络上发送。
12.Camera Service Changes
在本版本中,该模型用于访问共享资源在相机服务改变了从以前的“先来先服务”访问模型一个高优先级进程支持的访问模型。更改服务行为包括:
进入相机子系统资源,包括打开和配置一个摄像头设备,获得基于客户端应用程序的“优先级”的过程。应用程序进程和用户可见或前台活动通常是给定一个高优先级,使相机资源获取和使用更可靠。
活跃相机客户低优先级的应用可能会“驱逐”当一个更高的优先级应用程序试图使用相机。弃用的摄像头API,这导致onError驱逐客户机()被调用。在Camera2 API,它导致onDisconnected驱逐客户机()被调用。
与合适的相机硬件设备上,单独的应用程序进程能够独立开放和同时使用独立的摄像头设备。然而,多进程的用例,同时访问造成重大降解性能或功能的打开摄像头设备,现在相机服务发现和不允许的。这种变化可能导致“驱逐”为低优先级的客户,即使在没有其他应用直接尝试访问相同的摄像头设备。
改变当前用户原因活跃相机的客户应用程序由以前的用户帐户被驱逐。进入相机是有限的用户配置文件属于当前用户设备。在实践中,这意味着一个“客人”帐户,例如,将无法离开运行过程时使用相机子系统用户切换到一个不同的帐户。
13.Runtime
14.APK Validation
apk的平台现在执行更严格的验证。APK被认为是腐败的,如果一个文件在清单中声明,而不是出现在APK文件本身。APK必须续签如果任何内容删除。
详细可见:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apk-validation
相关文章推荐
- Android 6.0(API级别23)包括各种系统变化和API的行为变化。
- Android 6.0(API级别23)包括各种系统变化和API的行为变化
- 解决方法:android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类)
- android 6.0 api23 系统变化[转]
- android 6.0,为何Launcher3桌面和主菜单图标字体大小不跟随系统发生变化?
- Android 6.0(API 23) 运行时权限(二)之权限申请
- android 6.0(api 23) SDK以上版本 org.apache.http.*不支持解决办法
- 解决Android 6.0(api 23) SDK,不再提供org.apache.http.*
- API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。
- Android 6.0 运行时权限处理终结全网请求权限开源库出现的各种坑包括认为是google的bug
- android 6.0(api 23) SDK, org.apache.http包找不到
- Android 6.0(API 23) 运行时权限
- 解决android 6.0(api 23) SDK,不再提供org.apache.http.*
- Android 6.0(Marshmallow API level 23) 变更
- android 6.0(api 23) SDK,没有org.apache.http.包
- WatchService API实现监听文件系统中的文件变化(包括各级子目录)
- android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类)
- 解决方法:android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类)
- 解决方法:android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类)
- Android 6.0(API 23)后的权限问题