Android 6.0 新特性

6.0系统全称为Marshmallow,Google 2015年I/O大会上正式发布,目前市场份额也在持续上涨,它有着众多模块的更新。

主要更新模块

  • 电源管理(Android6.0 引入了下列特性来延长电池使用时间)
  • App Standby(应用待机)
    • 检测:当设备部充电,且在这时间内用户没有直接或间接的启动该应用。
    • 退出:当应用被激活时,或者设备充电时,系统将应用移除此状态。
  • Doze(瞌睡)
    • 检测:当设备不充电,且当设备静止且灭屏一段时间。
    • 周期:平台尝试让系统处于休眠状态,周期性地进入在一个维持窗口恢复正常操作,然后进入更长的休眠状态。
  • Exemptions(豁免)
    预装在设备上的系统应用和云消息服务,默认通常被豁免。应用开发者可以要求其应用使用这种设定。用户也可以在设置中来豁免某些应用。
  • App Link
    • 全称为应用程序链接。
    • 技术点:就是我们的隐式启动Intent。
    • Android更加鼓励应用程序间的关联而不再是单一的应用同浏览器的交互。
  • 指纹识别
    • 6.0 以前一直由各个手机制造厂商去研发。导致指纹识别不同的手机差异巨大。
    • 6.0 以后由Android系统提供API,硬件厂商只需提供相应的硬件支持即可。
  • 应用权限管理
    • 5.0 以前,只需要在manifest.xml中注册声明即可。
    • 5.0 以后,用户可以在安装的时候关闭某些权限。
    • 6.0 及以后,对于一些用户隐私权限总是会在第一次提示用户是否授予权限。

权限机制详解

  • 优势
    • 新的权限机制更好的保护了用户的隐私。
    • 给了程序向用户说明权限的作用。
    • 可以防止一些恶意程序盗取用户或者手机信息,增强了Android系统的安全性。
  • 分类
    • Normal Premission
    • Dangerous Permission & Dangerous Premission Group
  • 概念
    如果你申请某个危险的权限,假设你的app早已被用户授权了同一组的某个危险权限,那么系统会立即授权,而不需要用户去点击授权。
  • 新增API
    • ContextCompact.checkSelfPermission( 检查当前APP是否具有某个权限)
    • ActivityCompact.requestPermissions()(如果没有某个权限,就使用此方法申请权限,由于ActivityCompact是继承自ContextCompact,所以也可以用ActivityCompact)
    • onRequestPermissionsResult()(申请权限是异步的,这是个回调来处理用户选择的结果,如果用户同意给权限,紧接着做授权成功的处理,若用户不同意授权,做授权失败的处理)
    • ActivityCompact.shouldShowRequestPermissionRationale(给用户解释此权限的用途,在用户拒绝授权才会出现)
  • 使用流程
    • 在AndroidManifest中添加需要的权限(不可省,还要适配6.0以下的系统)
    • 检查权限(检测危险权限)
    • 申请授权
    • 处理权限申请回调
  • Dangerous Permissions (危险权限都是一组一组的,如果申请某个危险的权限,假设app早已被用户授权了同一组的某个危险权限,那么系统会立即授权,而不需要用户去点击授权,注意,不要对权限组过多的依赖,尽可能对每个危险权限都进行正常流程的申请,因为谁知道后期的版本中这个权限组会不会发生点变化呢)
    • group:android.permission-group.CONTACTS
      • permission:android.permission.WRITE_CONTACTS
      • permission:android.permission.GET_ACCOUNTS
      • permission:android.permission.READ_CONTACTS
  • group:android.permission-group.PHONE
    • permission:android.permission.READ_CALL_LOG
    • permission:android.permission.READ_PHONE_STATE
    • permission:android.permission.CALL_PHONE
    • permission:android.permission.WRITE_CALL_LOG
    • permission:android.permission.USE_SIP
    • permission:android.permission.PROCESS_OUTGOING_CALLS
    • permission:com.android.voicemail.permission.ADD_VOICEMAIL
  • group:android.permission-group.CALENDAR
    • permission:android.permission.READ_CALENDAR
    • permission:android.permission.WRITE_CALENDAR
  • group:android.permission-group.CAMERA
    • permission:android.permission.CAMERA
  • group:android.permission-group.SENSORS
    • permission:android.permission.BODY_SENSORS
  • group:android.permission-group.LOCATION
    • permission:android.permission.ACCESS_FINE_LOCATION
    • permission:android.permission.ACCESS_COARSE_LOCATION
  • group:android.permission-group.STORAGE
    • permission:android.permission.READ_EXTERNAL_STORAGE
    • permission:android.permission.WRITE_EXTERNAL_STORAGE
  • group:android.permission-group.MICROPHONE
    • permission:android.permission.RECORD_AUDIO
  • group:android.permission-group.SMS
    • permission:android.permission.READ_SMS
    • permission:android.permission.RECEIVE_WAP_PUSH
    • permission:android.permission.RECEIVE_MMS
    • permission:android.permission.RECEIVE_SMS
    • permission:android.permission.SEND_SMS
    • permission:android.permission.READ_CELL_BROADCASTS
  • 代码实践
Android 6.0 新特性_第1张图片
Demo核心代码

只要按照使用流程去在代码中请求权限,就能解决6.0手机权限问题,只是在真正项目中每个危险权限一个个去请求,代码重复性就比较高,于是就需要对此进行一次封装,Github上面有不少封装好的权限请求,使用方法就到每个链接去看吧,很简单的,当然也可以自己在自己项目中封装啦。

  1. MPermissions a easy API to use runtime permission for Android M
  2. PermissionGen Android API easy to use permission for Android M
  3. RxPermissions Android runtime permissions powered by RxJava

还有一篇写的很好的博客介绍运行权限的 Android 6.0运行时权限详解

你可能感兴趣的:(Android 6.0 新特性)