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里面拿到权限授予的回调结果:@Overridepublic 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

Android 6.0权限问题相关推荐

  1. android危险权限分组,Android 6.0权限请求相关及权限分组方法

    Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请. 权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限, ...

  2. Android 6.0 权限申请辅助 ----PermissionsHelper

    Android 6.0 权限申请辅助 ----PermissionsHelper 项目地址:https://github.com/didikee/PermissionsHelper Android 的 ...

  3. Android m6.0权限问题调用封装utils类 - Permission in Android M

    Android m6.0权限问题调用封装utils类 - Permission in Android M 1.概述 安卓平台权限一直有被流氓应用随便利用诟病, android M的发布彻底解决了这一问 ...

  4. 【酷熊科技】工作积累 ----------- android 6.0 权限问题

    android 6.0 权限问题: android.permission.READ_PHONE_STATE <uses-feature android:name="android.pe ...

  5. android6.0麦克风权限,android 6.0权限检测以及6.0以下,麦克风、相机权限判断

    android 6.0以上权限 android 6.0以上权限,我是通过PermissionsDispatcher进行申请,操作的,具体使用方法,见PermissionsDispatcher,Andr ...

  6. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  7. Android 6.0 权限管理最佳实践

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

  8. android 6.0权限封装,Android6.0------权限申请管理(单个权限和多个权限申请)

    Android开发时,到6.0系统上之后,有的权限就得申请才能用了. Android将权限分为正常权限 和 危险权限 Android系统权限分为几个保护级别.需要了解的两个最重要保护级别是 正常权限  ...

  9. android 9.0 权限管理_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

最新文章

  1. CentOS5.6环境安装oracle 10g(完整版)
  2. 优地机器人厂家_2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十...
  3. buffer 和cache的区别
  4. Nginx配置IP地址的动态黑名单
  5. linux 安装onos 记录
  6. CentOS 7.4 上如何安装 tomcat 9
  7. java如何输出完整的图_java实现输入输出图片
  8. android runnable传递参数,Android – 如何将数据传递到RunOnUiThread中的Runnable?
  9. YouTube 深度神经网络在推荐系统上的应用
  10. mysql不支持rank()_Mysql 实现 rank 和 != 问题
  11. 三国史诗——三国官制(一)
  12. 19-Python基础知识学习-----迭代器与生成器
  13. Emoji表情后台处理
  14. ITRON的任务管理
  15. 历年计算机office试题及答案,历年计算机二级MS Office真题及答案
  16. 7-5 盲盒包装流水线
  17. 腾讯一面,发现自己就是个渣渣
  18. tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)使用介绍
  19. 【Vue教程四】条件渲染、列表渲染、数组更新
  20. 1-计算机系统概述(OS)

热门文章

  1. 北京中信银行总行地址_中信银行拉萨分行举行“存款保险标识”启用和存款保险条例宣传活动...
  2. windows 下 安装mysql 出现 “ ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password
  3. 每日一题:leetcode81.搜索旋转排序数组Ⅱ
  4. Ubuntu使用jupyter notebook +导出PDF
  5. C++子类父类成员函数的覆盖和隐藏实例详解
  6. 链表逆序的原理及实例
  7. IO多路复用之poll总结
  8. 类模板static成员的使用
  9. Java面试知识点总结宝典助你通关!成功入职字节跳动
  10. 阿里P7大牛亲自教你!BAT这种大厂履历意味着什么?积累总结