一 . 运行时权限检查(Runtime Permisssions)
Android 6.0
版本上的运行时权限管理,当App的targetSdkVersion>=23
的时候,
需要用checkSelfPermission()
用来检测App是否被授予了权限
可以用requestPermissions()
用来请求权限
同时可以使用shouldShowRequestPermissionRationale()
方法来向用户解释为什么需要这个权限.
如果targetSdkVersion<23
我们依然需要完整的测试,可以可查看Working with System Permissionss
和 Permissions Best Practices官方的介绍.
二. 休眠和应用待机模式(Doze and App Standby)
将影响到AlarmManager闹钟
和定时器管理活动,可以使用setAndAllowWhileIdle()
和setExactAndAllowWhileIdle()
来解决
更多参考:Optimizing for Doze and App Standby
Android M新特性Doze and App Standby模式详解
三. 移除Appache的HTTP Client(Apache HTTP Client Removal)
Android6.0
版本移除了对Appache
的HTTP client
的支持,如果应用中使用了Appache Http API
,需要在build.gradle
中添加如下代码
- 1
- 2
- 3
四. 获取硬件标识符(Access to Hardware Identifier)
WifiInfo.getMacAddress()
和BluetoothAdapter.getAddress()
将始终返回02:00:00:00:00:00
为了能够通过Wi-Fi
和蓝牙扫描
,应用必须具有ACCESS_FINE_LOCATION
和 ACCESS_COARSE_LOCATION
权限
五. 通知(Notifications)
6.0移除了Notification.setLatestEventInfo()
方法,用Notification.Builder类来构造通知.
在需要反复更新通知的情况下,保存并重用Notification.Builder的实例;
在获取更新后的Notification实例时,调用其build()方法
六. AudioManager变化
不再支持通过AudioManager类来直接对特定的音频流设置音量和静音,
setStreamSolo()被替换为requestAudioFocus()
setStreamMute()被替换为adjustStreamVolume(),传入的值也变为ADJUST_MUTE 或 ADJUST_UNMUTE
七. 文本选择(Text Selection)
浮动工具栏需要做如下修改
(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模式。
八. 浏览器书签变化(Browser Bookmark Changes)
移除了全局书签的支持,Android.provider.Browser.getAllBookmarks() 和 android.provider.Browser.saveBookmark()方法被移除,
同样的READ_HISTORY_BOOKMARKS和WRITE_HISTORY_BOOKMARKS权限也被移除.
如果你app的目标版本是android6.0或更高,请不要访问全局的provider获取书签,
而是应该在应用的内部保存书签数据.
九. Wi-Fi和网络变化(Wi-Fi and Networking Changes)
(1) 现在,App只能修改自己创建的WifiConfiguration
的状态,而不再允许修改或删除由用户或其它App创建的WifiConfiguration
对象
(2) disableAllOthers=true
将不会使设备断开其它网络。如果你的app的targetSdkVersion是20或者更低,将固定在选择的Wi-Fi网络。
如果targetSdkVersion是21或者更高,使用multinetwork APIs (如openConnection(), bindSocket()和bindProcessToNetwork()方法)来保证网络流量被发送到指定的网络上。
转载自:http://blog.csdn.net/wbwjx/article/details/50687532