首先谈一谈Android 6.0的一些新特性

  1. 锁屏下语音搜索
  2. 指纹识别
  3. 更完整的应用权限管理
  4. Doze电量管理
  5. Now onTap
  6. App link

在开发过程中与我们关系最密切的就是"更完整的应用权限管理"这个特性了在这里面最重要的就是运行时权限了,

运行时权限

在Android6.0上我们在原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态监测,以下权限都需要在运行时判断

  1. 身体传感器
  2. 日历
  3. 摄像头
  4. 通讯录
  5. 地理位置
  6. 麦克风
  7. 电话
  8. 短信
  9. 存储空间

运行时权限处理

Android 6.0系统默认为targetSdkVersion小于23的应用授予所申请的所有权限,所以如果你以前的App设置的targetSdkVersion低于23在运行时也不会崩溃,但这也只是个临时策略,用户也可能在设置中取消授权

声明目标SDK版本,我们需要在build.gradle中声明targetSdkVersion为23

检查并申请权限

我们需要在用到权限的地方,每次检查App是否已经拥有权限,比如我们有一个下载功能需要写SD卡,比如我们的有一个下载功能

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//申请WRITE_EXTERNAL_STORAGE权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
}

请求权限后,系统会弹出请求权限的Dialog

用户选择允许或者拒绝后会调用onRequestPermissionResult方法,该方法类似于onActivityResult

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
我们接着需要根据requestCode和grantResults(授权结果)做出相应的后续处理

Fragment中运行时权限的特殊处理

  • 在Fragment中申请权限,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否则会回调到Activity的onRequestPermissionsResult
  • 如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方法,onRequestPermissionsResult不会回调回来,建议使用getParentFragment().requestPermissions方法,

这个方法会回调到父Fragment中的onRequestPermissionsResult,加入以下代码可以把回调透传到子Fragment

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
List<Fragment> fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
if (fragment != null) {
fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
}
}

相关开源项目

Android 6.0 新特性的更多相关文章

  1. Android 6.0 新特性 整理 资料来自网络

    Android 6.0新特性 Runtime Permissions Doze and App Standby Apache HTTP Client Removal BoringSSL Access ...

  2. Android 8.0 新特性

    Android 8.0 (Android Oreo(奥利奥))新特性介绍 通知渠道 - Notification Channels 通知渠道是由应用自行定义的通知内容类别,借助渠道,开发者可以让用户对 ...

  3. android 7.0 新特性 和对开发者的影响

    android 7.0新特性 - jiabailong的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/jiabailong/article/details/5241 ...

  4. 腾讯云安全:开发者必看|Android 8.0 新特性及开发指南

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 A ...

  5. 开发者必看|Android 8.0 新特性及开发指南

    背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Andro ...

  6. Android 7.0新特性

    还望支持个人博客站:http://www.enjoytoday.cn 由于google目前不是无法直接在国内访问,故此,对于android 开发平台的7.0新特性做个保存.也可供大家查阅.原文转自an ...

  7. android 5.0新特性

    Android Lollipop 面向开发人员的主要功能 Material Design 设计 注重性能 通知 以大屏幕呈现 以文档为中心 连接性能再上一级 高性能图形 音频处理功能更强 摄像头和视频 ...

  8. Android 5.0 新特性

    Material Design Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干 ...

  9. android 5.0新特性CardView教程

    CardView 是android5.0新加入的特性,大家先别着急,由于谷歌出了cardview的兼容包,也就是android.support.v7.widget.CardView包,所以在5.0以下 ...

随机推荐

  1. mac终端terminal快捷键:

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" } span.s1 { } p.p1 { m ...

  2. drupal字段值的规律

    field_abc,则会出现field_data_field_abc这样一个表,然后有entity_id这个字段,然后有field_abc_value或者field_abc_target_id,或者f ...

  3. svn 版本控制

    首先来下载和搭建SVN服务器. Subversion已经迁移到apache网站上了,下载地址: http://subversion.apache.org/packages.html windows操作 ...

  4. webbench---linux压测工具

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好用,安装使用也特别方便,并且非常小. 1.适用系统:Linux-CentOs 2.编译安 ...

  5. upupw一键绿色免安装环境包

    项目测试,选择upupw环境包 下载nginx版本,解压即可使用 任务就是要把我电脑上的项目test.com提供给公司局域网同事访问,如果是apache的话,前面的wampserver已经讲过了. 1 ...

  6. ExtJS获取父子、兄弟容器元素方法

    http://www.cnblogs.com/CoolHu/archive/2012/12/08/2808433.html 1.当前对象的父对象(上级对象) this.ownerCt: 2.当前对象的 ...

  7. JQuery validate.js 在ajax提交form时如何触发

    在使用jquery validate.js 插件时,发现,如果是用onclick事件捕获提交按钮的动作,并且ajax动态提交form,验证不会被触发,而是直接提交了form. 后来发现,需要手动调用该 ...

  8. Elasticsearch 检索

    说到查询,那么索引也是一个绕不开的话题,可以说,没有索引就没有检索,先来看一个示意图 左边是索引过程,右边是检索过程.关键的步骤是分词过程,我用等号表示这两个过程一样,而且,必须一样,这个等号并不是模 ...

  9. JS数组方法汇总 array数组元素的添加和删除

    js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...

  10. ionic 初入门

    ionic ionic 是webapp开发的一个框架 安装 npm install -g cordova ionic ;  我这两个分开装,因为ionic模块拖不下来,所以只好等待时机.这时候科学上网 ...