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 = ; 

requestPermissions(perms, permsRequestCode);

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

@Override

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

    switch(permsRequestCode){

        case :

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

            boolean cameraAccepted = grantResults[]==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

最新文章

  1. xdotool模拟击键和鼠标移动
  2. ansible写一个简单的playbook
  3. 第一篇使用Markdown的文章
  4. 配置jenkins,并把iOS包自动上传至fir.im
  5. PHP生成条形码
  6. php 设置白名单ip
  7. php下载文件的一种方式
  8. Javascript高级程序设计复习——第五章引用类型 【原创】
  9. Java〜slf4日志框架的使用
  10. Spring Boot 框架的依赖管理
  11. Java I/O - 对象的输入输出与序列化
  12. ODPS-Java-SDK快速入门
  13. es6入门set和map
  14. 《剑指offer》-链表的第一个公共节点
  15. zeebe docker-compose 运行(包含monitor)
  16. Kubernetes学习之路(二十二)之Pod资源调度
  17. python nose测试框架全面介绍三
  18. Linux中chown、chmod、chgrp
  19. kafka的分区模式?
  20. git gc内存错误的解决方案

热门文章

  1. ORACLE的客户端如何连接到数据库
  2. MySQL调试
  3. BZOJ 1458 士兵占领
  4. 转:SVN Eclipse插件Subclipse安装和配置
  5. invesments 第三章 上
  6. mysql 只给更新表的某个字段的授权
  7. LeeCode-Two Sum
  8. 数字图像处理之sobel边缘检测
  9. 用B-树实现虚拟图书管理系统
  10. HDU1232 畅通工程 (并查集模板题)