android 6.0版本适配的几个重要方面

来源:互联网 发布:java可变长参数 使用 编辑:程序博客网 时间:2024/06/05 16:17

一 . 运行时权限检查(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版本移除了对AppacheHTTP client的支持,如果应用中使用了Appache Http API,需要在build.gradle中添加如下代码

android {      useLibrary 'org.apache.http.legacy'  } 
  • 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