Android6.0 运行时权限

原创 2016年06月01日 22:32:36

在android6.0的源码中有这样一段代码

     protected void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
            mPhotoUri = photoUri;
            mStatus = Status.SUB_ACTIVITY;
            CompactContactEditorFragment.this.startActivityForResult(intent, requestCode);
     }

这边的 intent 传过来的是 ”android.media.action.IMAGE_CAPTURE“,这个 action 需要权限:

<uses-permission android:name="android.permission.CAMERA"/>

这样的一段代码放在 6.0 之前的版本上都是可以正常运行的。但是在6.0上运行就会出错,这就是android最新的运行时权限。

只要是涉及到隐私的权限,即使是在 manifest 中声明过,代码跑到的时候仍旧会要求用户授权。以下是在android6.0上的实现:

private static final int REQUEST_CODE_ASK_CAMERA = 1;
@Override
protected void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
   mPhotoUri = photoUri;
   mStatus = Status.SUB_ACTIVITY;
   //检查有没有获取拍照权限
   if(ContextCompat.checkSelfPermission(mContext,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
        //如果没有获取权限,就去请求权限,这个操作是异步的
        ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.Manifest.permission.CAMERA},REQUEST_CODE_ASK_CAMERA);
    }else{
        CompactContactEditorFragment.this.startActivityForResult(intent, requestCode);
    }
}

上面如果检测到没有权限,就会去请求权限,会弹出一个对话框,如果用户授权,然后会回调 onRequestPermissionsResult 这个方法,我们需要复写它来处理授权的结果:

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_CAMERA://这是搜门上面请求的code
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //表示授权成功,这时候就可以再去调用相机应用,当然这边需要将intent和requestCode存下来
                    CompactContactEditorFragment.this.startActivityForResult(intent, requestCode);
                } else {
                    // 授权未成功
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

这样就实现了6.0的运行时权限。

并不是所有的权限都需要运行时授权,只有下面列出来的需要。其他的权限只需要在manifest中配置就可以,跟6.0以前的版本一样。可以看到下面的权限是分组的,如果一个组中某一个权限被授权了,那么这个组中的其他权限也将被授予。

运行时权限

版权声明:本文为博主原创文章,未经博主允许不得转载。

android6.0运行时权限完美封装

前几天看了郭大神的运行时权限的专讲,深受启发,由于现在基于目前项目中的运行时权限封装的还不是那么完美,趁着郭神建议的还是历历在目。于是把它完整的敲了下来。在加上自己的一些见解,封装成一个完整的demo...
  • androidstarjack
  • androidstarjack
  • 2017年01月03日 13:41
  • 2093

不用三方 , 自己做Android6.0运行时权限的处理

自从安卓6.0出来以后 , 运行时权限有时候也成为了一个梗 下面将叫你如何利用自带的API , 处理运行时权限问题...
  • huazhiling520
  • huazhiling520
  • 2017年02月13日 18:54
  • 131

Android 6.0 运行时权限处理解析

1.概述  不知道大家有没有遇到过这种情况,开发app的时候发现自己手机选择照片是正常的,测试那边的一台手机怎么搞都不行,然后查看版本之后才发现是6.0的手机。      随着Android ...
  • z240336124
  • z240336124
  • 2016年11月11日 17:55
  • 16914

Android 6.0 运行时权限处理完全解析

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/50709663; 本文出自:【张鸿洋的博客】 一、概述 随着A...
  • lmj623565791
  • lmj623565791
  • 2016年02月22日 09:31
  • 244573

Android6.0运行时权限解决方案

Android中单点登录的一种解决方案前提:服务端用户系统已集成token监听被踢下线的方式 任意请求返回token失效 在任意一个http请求中后台返回特定的code:与用户相关的http请求往往需...
  • qq_31255289
  • qq_31255289
  • 2016年08月22日 17:54
  • 1370

android SD卡权限

在操作SD卡时添加了
  • ltf857
  • ltf857
  • 2016年09月08日 13:28
  • 372

Android 6.0新特性之运行时权限

转载请注明出处:http://blog.csdn.net/demokui/article/details/54376634一、Android 6.0 (API_23)简介首先先给出一张相关文档截图:可...
  • DemoKui
  • DemoKui
  • 2017年01月12日 11:50
  • 641

Android 6.0 运行时权限管理最佳实践

在Android M中权限系统被重新设计,发生了颠覆性的变化,很多人把握不好这个变化,一是对这个权限策略和套路还没有摸透,二是没有一个很好的实践来支撑,很多人问我关于权限管理的问题,往往我都没有直接回...
  • yanzhenjie1003
  • yanzhenjie1003
  • 2016年09月11日 13:11
  • 262830

android6.0运行时权限

我们的app一般都会需要缓存和一些图片的存储,当然我们的目录可以是自己的私有目录,getExternalCacheDir或者getCacheDir是不需要权限的,但是如果需要在sd卡下存储呢,此时需要...
  • s_nshine
  • s_nshine
  • 2017年03月02日 20:41
  • 106

Android6.0 运行时权限

Android6.0 运行时权限 Runtime Permission
  • huyuchaoheaven
  • huyuchaoheaven
  • 2016年04月28日 19:26
  • 2034
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android6.0 运行时权限
举报原因:
原因补充:

(最多只允许输入30个字)