Android 6.0 权限问题

Android6.0的运行时权限细节就不赘述了,详细可见文末参考资料的第2篇,详细讲解下于此相关的三个api(个人理解)。

ContextCompat.checkSelfPermission()//检查权限
ActivityCompat.requestPermissions()//请求权限
onRequestPermissionsResult()//回调函数

1. checkSelfPermission

函数定义:

该函数返回一个int,如果返回的整形值等于PackageManager.PERMISSION_GRANTED说明已经拥有改权限,如果返回值等于PackageManager.PERMISSION_DENIED说明没有拥有权限。

注:PackageManager.PERMISSION_GRANTED和PackageManager.PERMISSION_DENIED是PackageManager的两个int常量,专门用于表示是否拥有权限。

2.requestPermissions

第一步检查权限的结果如果是PackageManager.PERMISSION_GRANTED,那么该干嘛干嘛去,因为你已经拥有改权限(例如使用摄像头),如果检查结果是PackageManager.PERMISSION_DENIED,那么就要申请到权限才能干你想干的。

函数定义:

void requestPermissions (Activity activity,
                        String[] permissions,
                        int requestCode)


主要说明该函数的三个参数(最让我难以理解的是第三个参数)


1.activity

activity就是要申请权限的activity,写this就可以。


2.permissions

这是一个String数组,该数组包含我们要申请的权限列表,比如要申请的权限有:Manifest.permission.READ_CONTACTS等好几个,就把这些权限(String)添加到该数组中。

注:这说明可以批量申请权限


3.requestCode

这是一个int,是程序猿自定义的一个参数,用法如下:

private static final int REQUEST_PERMISSION_CAMERA_CODE = 1;
    requestPermissions( this,
                        new String[]{Manifest.permission.CAMERA},
                        REQUEST_PERMISSION_CAMERA_CODE);

那么该参数有何用呢?请看第三个函数onRequestPermissionsResult。

3.onRequestPermissionsResult

第二个函数(requestPermissions)执行完之后,会回调onRequestPermissionsResult,把请求结果告诉请求者,成或者不成总得有个说法不是!程序猿需要重写这个方法,对不同的结果执行不同的对策。

@Override
public void onRequestPermissionsResult( int requestCode,
                                        String permissions[],
                                        int[] grantResults)
{
    switch (requestCode) {
        //仔细看英文注释,这是官方文档的例子,注释写的很好
        case REQUEST_PERMISSION_CAMERA_CODE: {
                // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // contacts-related task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

注意case之后的代码,这就是我们之前定义的那个常量,对了,他的作用就是定位你申请的是那个权限,前面也说了,可以一次申请多个权限,那么怎么对应我们申请的权限和申请结果呢?就靠这个int常量了。

参考资料(绝对干货):
http://blog.csdn.net/lmj623565791/article/details/50709663
https://developer.android.com/training/permissions/requesting.html?hl=zh-cn#perm-request

时间: 2024-10-14 17:02:04

Android 6.0 权限问题的相关文章

Android 6.0权限申请详解及权限资料整理_Android

在android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请. 一.权限的申请两步骤: 1.权限申请: /** * @param permissions需要申请的权限 * @param requestCode申请回调code */ public static void requestPermissions(final @NonNull Activity activity,final @

Android 6.0 权限管理最佳实践

  博客: Android 6.0 运行时权限管理最佳实践 github: https://github.com/yanzhenjie/AndPermission  

Android 6.0权限问题

Android 6.0 open failed: EACCES (Permission denied)   对于6.0+权限问题,报错如上:   解决方案: Android 6.0 (Marshmallow). 添加新的权限模型,需要在运行时动态获取所需要的权限. 首先判断手机系统版本是否在6.0+然后才是支持运行时动态获取权限:   private boolean canMakeSmores(){ return(Build.VERSION.SDK_INT>Build.VERSION_CODES

Android 6.0权限申请详解及权限资料整理

在android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请. 一.权限的申请两步骤: 1.权限申请: /** * @param permissions需要申请的权限 * @param requestCode申请回调code */ public static void requestPermissions(final @NonNull Activity activity,final @

关于Android 6.0权限的动态适配详解

前言 Android6.0代号棉花糖.尽管是在15年I/O大会上Google被正式发布的了.但是看看大多数人的项目中大家的 targetSdkVersion 是不是还都用的22.大家都认为6.0+的市场占有率还没那么高.那么就请看谷歌2017年9月份公布的版本分布图. 从数据来看确实没那么高O(∩_∩)O.6.0+的市场占有率仅为50% ̄□ ̄||.只因安卓用户的基数太大了吧.延伸至各种人群.虽然说占比才一半但时基数大总的用户数量还是蛮多的.这两天刚做完6.0权限的适配.那么请说一下自己测试的时候

详解Android权限管理之Android 6.0运行时权限及解决办法_Android

前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

详解Android权限管理之RxPermission解决Android 6.0 适配问题_Android

前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxPermission.这里不再介绍Android 6.0运行时权限了,直接看下如何使用RxPermission. RxPermission: 用于适配Android 6.0新的权限模型的开源框架. 下载地址:点此下载 如何使用? 1.)在app module的build.gradle中添加如下配置 使

详解Android权限管理之Android 6.0运行时权限及解决办法

前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

详解Android权限管理之RxPermission解决Android 6.0 适配问题

前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxPermission.这里不再介绍Android 6.0运行时权限了,直接看下如何使用RxPermission. RxPermission: 用于适配Android 6.0新的权限模型的开源框架. 下载地址:点此下载 如何使用? 1.)在app module的build.gradle中添加如下配置 使