Android 6.0 的变化

Android 6.0版本是在2015年推出的,目前在很多手机上已经安装了Android系统6.0(7.0都已经出来了~)。但是国内手机还大量是5.0及其以下的设备,所以我在开发的过程中,对6.0的认识不是很全面。因此我在Google开发者网站上找到了这篇文章Android 6.0 Changes,对Android 6.0的知识进行了学习,希望可以通过这篇文章掌握Android 6.0与之前版本的区别。同样地,这篇文章写得也很好,写了很多文档之外的内容,可供参考。
Android 6.0就是在Google 2015年的 I/O大会上发布的Android新系统(API 23),代号是Marshmallow。
它主要有下面几个特点:

运行时访问权限

这个版本有一种新的权限模式,在运行Android App的过程中可以管理App权限。当用户进行安装和自动更新时,这个模式提升了用户的对于权限的掌控和权限的对于用户的透明度(可以在这个时候去管理权限)。用户可以对于已经安装的应用的单独权限进行允许和拒绝。
当你的Android应用目标是Android 6.0(API 23)或更高的设备的时候,确保在运行的时候去检查和请求权限。为了确定你的应用请求的权限是否获取到,调用checkSelfPermission() 方法。调用 requestPermissions() 方法去请求一个新的权限。即使你的应用的目标设备不是Android 6.0(API 23)或更高的设备,你需要在新的权限模式下去测试你的应用。

假寐和应用等待(Doze and App Standby)

Android 6.0 为设备提供了新的省电模式。这些特点影响所有的Android app所以请在新的模式里去测试你的app。

Doze

如果用户拔掉设备的插头,并且保持它的屏幕暗掉并在一段时间内不再操作,设备将会进入Doze模式,在这个模式里系统将会保持在沉睡状态。在这个模式里,设备将会周期性地在短暂的时间段里恢复正常的操作以便应用的同步和系统进行任何待定操作。

App Standby

App备用允许系统去决定当用户不再活跃地使用一个应用的时候,该应用是否是闲置状态。当用户在一段时间内不再点击屏幕的时候,系统将会做出上面的决定。如果设备拔掉了充电线,系统将会禁止网络访问并且将会推迟App同步等操作。

Apache HTTP客户端的移除

Android 6.0版本移除了对于Apache HTTP 客户端(Apache HTTP client)的支持。如果你的app正在使用它并且目标是Android 2.3(API 9)及以上的设备时,使用HttpURLConnection 作为替代。这个Api将会更加有效,因为它减少了通过透明压缩的网络使用和回复缓存,并且使电量消耗减少到最少。如果你想继续使用Apache HTTP 的API,你必须在你的build.gradle文件里定义下面的代码:

android {
    useLibrary 'org.apache.http.legacy'
}

BoringSSL

Android正在从 OpenSSL库转移到 BoringSSL库。如果你在你的App里使用Android NDK,不要链接不是ndk api库的一部分的加密库,例如 libcrypto.so和 libssl.so库。因为OpenSSL库存在大量的安全隐患,所以Google决定使用BoringSSL。这是一个网络传输层的密码库,为网络传输提供安全的保证。使用BoringSSL提高了Android系统的安全性。

访问硬件标识符

为了更好地保护用户数据,Android移除了获取本地硬件标识符的代码途径,特别针对使用wifi和蓝牙的app。WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()方法现在都返回常量了。

通知(Notifications)

Android 6.0移除了Notification.setLatestEventInfo()方法。取而代之的是使用Notification.Builder 类去构建通知。为了反复更新一个通知,重用Notification.Builder 实例。

音频管理器的变化

直接通过AudioManager 类设置音量或者噪音控制已经不再支持了。setStreamSolo() 方法已经被废弃了并且你应该用requestAudioFocus() 来代替它。相似地,setStreamMute()方法也被废弃了,取而代之则应该调用adjustStreamVolume() 方法,并且传递ADJUST_MUTEADJUST_UNMUTE

文本选择

这里写图片描述
如图所示,当用户在你的设备上选择一段文字的时候,你现在可以在一个悬浮的工作栏里进行剪切,复制和粘贴操作。为了实现供文字选择的悬浮工作栏,你应该在你的app里作如下的修改:
1.在你的view和activity对象里,把你的 ActionMode 从startActionMode(Callback)改为startActionMode(Callback, ActionMode.TYPE_FLOATING)。
2.把你的ActionMode.Callback的实现扩展到ActionMode.Callback2。
3.重载 onGetContentRect() 方法去提供内容区域的坐标。
4.如果长方形定位不再有效并且它是唯一一个变成无效的元素,调用invalidateContentRect() 方法。
如果你在使用Android Support Library 22.2版本,要知晓悬浮的工作栏不是逆向兼容的并且应用程序兼容默认控制ActionMode 对象。

浏览器书签的变化

6.0版本移除了全局书签的支持。相应的关于全局书签的函数都从api里做了移除。如果的设备是Android 6.0系统的话,不要通过全局书签去获取相应的信息。相反地,你应该在内部去存储书签信息。

Android Keystore(签名文件)变化

Android 6.0 不再支持DSA算法。ECDSA仍然被支持。
当安全锁屏不能使用或重置的时候,不要加密的秘钥将不再被删除。需要加密的秘钥将在这些操作时被删除。

Wi-Fi和网络变化

当其他用户或者其他的app创建了WifiConfiguration 对象的时候,你将没有权限去删除或者改变这些对象。
在之前的Android版本中,如果一个用户强制设备通过使用enableNetwork() 的disableAllOthers=true设置去连接一个特定的wifi,设备将会从例如蜂窝数据的其他网络断开。在Android 6.0中,设备将不再与其他网络断开。如果你的app的targetSdkVersion是20或者更低的话,它固定选中Wi-Fi网络。如果你的targetSdkVersion是21或者更高的话,使用多网络api去确保是在被选中的网络上进行网络传输的。

相机服务的变化

在相机服务里使用共享资源的模式已经从过去的“第一次使用,第一次请求”转变为了一个新的模式:高优先级的进程更受青睐:
1.包括打开和相机设备的相机子系统资源的权限是基于应用进程的优先级的。带有用户可视和前台活动的应用进程将普遍拥有更高的权限,这样可以使相机的使用更加可靠。
2.当一个高优先级的应用要使用相机的时候,低优先级应用正在使用的相机可能被“剥夺”。在废弃的相机的API里,onError()函数就是在被剥夺的时候被调用的。
3.在适当的相机硬件设备上,单独的应用进程可以同时独立地打开和使用相机设备。但是,在多进程的用例里,不同的应用进程可以同时使用独立地摄像头设备。但是,多进程的用例时,这会导致性能的退化,不过这些在Android 6.0上已经不被允许了。这个变化将会导致低优先级的客户端不能使用相机功能,即使其他的应用不再申请摄像头权限。
4.改变当前用户导致由前一个用户创建的相机使用将会被阻隔。能够使用相机的权限仅能由当前用户使用。事实上,这意味着当用户切换到一个不同的账户之后,一个“访客”账户将不再能够离开正在使用相机子系统的正在运行进程。

运行期

Android ART模式现在给newInstance() 方法实现了访问规则。这个修改修复了一个Dalvik模式在之前的版本里检查访问规则不正确的问题。如果你的app使用了newInstance()方法并且你想重载权限检查,调用setAccessible()方法把输入参数设置成true。如果你的app使用了v7 appcompat library和 v7 recyclerview library,你必须提升你的app去使用这些库的最新版本。否则,确保任何引用自XML的自定义类被升级了以便它们的类构造器是可访问的。Android 6.0同时提升了动态链接器的性能,修复了一些bug。

APK验证

Android平台现在为APK执行更严格的认证。如果一个文件在manifest 里被定义但是没有出现在APK文件本身里面的话,这个APK文件被认为是有问题的。如果其中的文件被移除了,这个APK必须重新被签名。

USB连接

通过USB端口的连接将会默认是充电模式。如果想去访问手机里的内容,用户必须明确地在手机上同意这样交互的权限。

上面是Android 6.0版本的一些变化(简略版),里面有一部分是我自己翻译的内容,如果有不对的地方,希望看到的朋友为我指出,谢谢~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值