Android 6.0适配的几个重要方面

一 . 运行时权限检查(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'  
} 

四. 获取硬件标识符(Access to Hardware Identifier)

WifiInfo.getMacAddress()BluetoothAdapter.getAddress()将始终返回02:00:00:00:00:00
为了能够通过Wi-Fi蓝牙扫描,应用必须具有ACCESS_FINE_LOCATIONACCESS_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()方法)来保证网络流量被发送到指定的网络上。

参考
值得你关注的Android6.0上的重要变化(一)

值得你关注的Android6.0上的重要变化(二)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值