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.LOLLIPOP_MR1);

}

 

然后是运行时获取权限的操作:

 

String[] perms = {"android.permission.RECORD_AUDIO", "android.permission.CAMERA"};

int permsRequestCode = 200; 

requestPermissions(perms, permsRequestCode);

requestPermissions这个方法是Activity的方法,然后在onRequestPermissionResult里面拿到权限授予的回调结果:

@Override

public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){

    switch(permsRequestCode){

        case 200:

            boolean audioAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;

            boolean cameraAccepted = grantResults[1]==PackageManager.PERMISSION_GRANTED;

            break;

    }

}

 

 

下面这个方法可以获取用户是不是已经授予某些特殊的权限:

 

 

private boolean hasPermission(String permission){

    if(canMakeSmores()){

        return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);

    }

    return true;

}

 

如果用户已经授权过了这些权限,系统不会记住的,需要我们自己记住这些。

private boolean shouldWeAsk(String permission){

    return (sharedPreferences.getBoolean(permission, true));

}

private void markAsAsked(String permission){

    sharedPreferences.edit().putBoolean(permission, false).apply;

}

 

 

同一个页面,可能多次需要某些权限,切记不要重复让用户授权

 

private ArrayList findUnAskedPermissions(ArrayList wanted){

    ArrayList result = new ArrayList<~>();

    for(String perm : wanted){

        if(!hasPermission(perm) && shouldWeAsk(perm)){

            result.add(perm);

        }

    }

    return result;

}

 

 

转自:http://www.captechconsulting.com/blogs/runtime-permissions-best-practices-and-how-to-gracefully-handle-permission-removal

时间: 2024-10-08 10:32:20

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开始,部分的权限需要我们动态申请,也就是说当我们的打开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 6.0 权限问题

Android6.0的运行时权限细节就不赘述了,详细可见文末参考资料的第2篇,详细讲解下于此相关的三个api(个人理解). ContextCompat.checkSelfPermission()//检查权限 ActivityCompat.requestPermissions()//请求权限 onRequestPermissionsResult()//回调函数 1. checkSelfPermission 函数定义: 该函数返回一个int,如果返回的整形值等于PackageManager.PERM

详解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中添加如下配置 使