1.运行时的权限
这个版本引入了一个新的权限模型,用户现在可以在运行时直接管理应用程序的权限。这个模型提供了改进的可见性和控制用户权限,同时简化安装和自动升级过程对于应用程序开发人员。用户可以授予或撤销权限单独安装的应用程序。 在你的应用程序的目标Android 6.0(API级别23)或更高,确保在运行时检查和请求权限。来确定应用程序已经被授予权限,调用新的checkSelfPermission()方法。请求权限,调用新的requestPermissions()方法。即使你的应用程序并不是针对Android 6.0(API级别23),你应该测试你的应用在新的权限模型。有关支持新的权限模型在你的应用程序,使用系统权限。对如何评估对应用程序的影响,看到权限最佳实践。
这个版本引入了新的节能优化闲置设备和应用程序。这些特性影响所有应用程序确保测试您的应用程序在这些新模式。
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'
}
Android是BoringSSL远离OpenSSL库。如果你在你的应用程序,使用Android NDK对加密库不是不联系NDK API的一部分,比如libcrypto。所以,libssl.so。这些库不是公共api, 并可能改变或打破跨版本和设备不另行通知。此外,你可能会暴露自己的安全漏洞。相反,修改您的本机代码调用Java加密api通过JNI或静态链接对您选择的密码库。
为用户提供更大的数据保护,开始在本版本中,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地址。
这个版本删除Notification.setLatestEventInfo()方法。使用通知。构建器类来构建通知。反复更新通知,通知重用。构建器实例。调用build()方法来获取更新通知实例。
亚行壳dumpsys通知命令不再打印出你的通知文本。使用亚行壳dumpsys通知——noredact命令而不是打印的文本通知对象。
7.AudioManager Changes
设置音量直接或通过AudioManager静音特定流类是不再支持。setStreamSolo()方法是弃用,你应该调用requestAudioFocus()方法。同样,setStreamMute()方法是弃用; 相反,称为adjustStreamVolume()方法并传递价值ADJUST_MUTE或者ADJUST_UNMUTE的方向
当用户选择文本在你的应用程序,现在您可以显示文本选择行为,如剪切、复制和粘贴在一个浮动工具栏。用户交互实现类似于上下文操作栏,使所述上下文动作模式为个人观点。
实现浮动工具栏的文本选择,在你现有的应用程序做以下更改:
在你的视图或活动对象,改变你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模式支持。
这个版本将支持全球书签。android.provider.Browser.getAllBookmarks()和android.provider.Browser.saveBookmark()方法现在移除。
同样,READ_HISTORY_BOOKMARKS,WRITE_HISTORY_BOOKMARKS权限删除。
如果你的应用目标Android 6.0(API级别23)或更高,不从全球供应商访问书签书签或使用权限。相反,应用程序应该在内部存储书签数据。
有了这个版本,安卓不再支持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()方法),以确保其网络流量所选网络上发送。
在本版本中,该模型用于访问共享资源在相机服务改变了从以前的“先来先服务”访问模型一个高优先级进程支持的访问模型。更改服务行为包括:
进入相机子系统资源,包括打开和配置一个摄像头设备,获得基于客户端应用程序的“优先级”的过程。应用程序进程和用户可见或前台活动通常是给定一个高优先级,使相机资源获取和使用更可靠。
活跃相机客户低优先级的应用可能会“驱逐”当一个更高的优先级应用程序试图使用相机。弃用的摄像头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