1. Android 6.0 open failed: EACCES (Permission denied)

对于6.0+权限问题,报错如上:

解决方案:

Android 6.0 (Marshmallow). 添加新的权限模型,需要在运行时动态获取所需要的权限。

首先判断手机系统版本是否在6.0+然后才是支持运行时动态获取权限:

  1. private boolean canMakeSmores(){
  2.  
  3. return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);
  4.  
  5. }

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

  1. String[] perms = {"android.permission.RECORD_AUDIO", "android.permission.CAMERA"};
  2.  
  3. int permsRequestCode = ;
  4.  
  5. requestPermissions(perms, permsRequestCode);
  6.  
  7. requestPermissions这个方法是Activity的方法,然后在onRequestPermissionResult里面拿到权限授予的回调结果:
  8.  
  9. @Override
  10.  
  11. public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
  12.  
  13. switch(permsRequestCode){
  14.  
  15. case :
  16.  
  17. boolean audioAccepted = grantResults[]==PackageManager.PERMISSION_GRANTED;
  18.  
  19. boolean cameraAccepted = grantResults[]==PackageManager.PERMISSION_GRANTED;
  20.  
  21. break;
  22.  
  23. }
  24.  
  25. }

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

  1. private boolean hasPermission(String permission){
  2.  
  3. if(canMakeSmores()){
  4.  
  5. return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);
  6.  
  7. }
  8.  
  9. return true;
  10.  
  11. }

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

  1. private boolean shouldWeAsk(String permission){
  2.  
  3. return (sharedPreferences.getBoolean(permission, true));
  4.  
  5. }
  6.  
  7. private void markAsAsked(String permission){
  8.  
  9. sharedPreferences.edit().putBoolean(permission, false).apply;
  10.  
  11. }

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

  1. private ArrayList findUnAskedPermissions(ArrayList wanted){
  2.  
  3. ArrayList result = new ArrayList<~>();
  4.  
  5. for(String perm : wanted){
  6.  
  7. if(!hasPermission(perm) && shouldWeAsk(perm)){
  8.  
  9. result.add(perm);
  10.  
  11. }
  12.  
  13. }
  14.  
  15. return result;
  16.  
  17. }

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

Android 6.0权限问题的更多相关文章

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

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

  2. ## Android 6.0 权限申请 ##

    Android 6.0 权限申请 1. 以前的权限申请(sdk<23) 直接在AndroidManifest.xml中申明即可: <uses-permission android:name ...

  3. Google Android 6.0 权限完全解析

    注:本文只针对Google原生Android系统有效, 小米魅族等手机有自己的权限机制, 可能不适用 一.运行时权限的变化及特点 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是 ...

  4. Android 6.0权限管理

    Android 6.0权限管理 关于权限管理 Android6.0 发布之后,Android 的权限系统被重新设计.在 23 之前 App 的权限只会在用户安装的时候询问一次,App一旦安装后就可以使 ...

  5. android:Android 6.0权限控制代码封装

    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...

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

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

  7. Android 6.0权限全面详细分析和解决方案

    原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...

  8. Android 6.0权限

    在android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限. 只有那些targ ...

  9. Android 6.0 权限管理

    google官方例子: https://github.com/googlesamples/android-RuntimePermissions Android 6.0在我们原有的AndroidMani ...

随机推荐

  1. poj1200Crazy Search (哈希)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Crazy Search Time Limit: 1000MS   Memory ...

  2. 视差滚动(Parallax Scrolling)效果的原理和实现

    视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验.作为今年网页设计的热点趋势,越来越多的网站应用了这项技术. 一.什么是视差滚 ...

  3. 利用ICommand和ITool重写Arcengine中控件的事件

    Arcengine窗体开发中,不同命令或者工具可能会触发同一控件的同一事件,这样会造成该事件中代码的混乱.以主窗体的AxMapcontrol控件为例,当开始画图时因为有很多种类型的Feature,所以 ...

  4. CentOS6.4卸载自带的OpenJDK并安装jdk1.6.21

    #进入系统的terminal,查看当前的jdk版本: shell>java -version #查看安装包 shell>rpm -qa|grep java #将上条命令查出来的结果卸载掉, ...

  5. RHEL 7.0 修改防火墙配置

    RHEL 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 关闭firewall: systemctl stop firewalld.service #停止firewal ...

  6. Linux下MySQL 5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)

    一.登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:+--------------------------+----------------- ...

  7. Jquery时间快捷控件(Jtime)配置v1.1

    1.插件代码 /** * @title 时间工具类 * @note 本类一律违规验证返回false * @author {boonyachengdu@gmail.com} * @date 2013-0 ...

  8. UESTC_冬马党 CDOJ 882

    冬马党 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Statu ...

  9. 将Oracle JDBC驱动库安装到本地仓库

    1.为了添加详细版本信息,先查看当前Oracle数据库版本 select * from v$version; 查询返回如下信息 BANNER ----------------------------- ...

  10. HDU 3634 City Planning (离散化)

    City Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...