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 = ; 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
Android 6.0权限问题的更多相关文章
- Android 6.0 权限申请辅助 ----PermissionsHelper
Android 6.0 权限申请辅助 ----PermissionsHelper 项目地址:https://github.com/didikee/PermissionsHelper Android 的 ...
- ## Android 6.0 权限申请 ##
Android 6.0 权限申请 1. 以前的权限申请(sdk<23) 直接在AndroidManifest.xml中申明即可: <uses-permission android:name ...
- Google Android 6.0 权限完全解析
注:本文只针对Google原生Android系统有效, 小米魅族等手机有自己的权限机制, 可能不适用 一.运行时权限的变化及特点 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是 ...
- Android 6.0权限管理
Android 6.0权限管理 关于权限管理 Android6.0 发布之后,Android 的权限系统被重新设计.在 23 之前 App 的权限只会在用户安装的时候询问一次,App一旦安装后就可以使 ...
- android:Android 6.0权限控制代码封装
新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...
- Android 6.0 权限管理最佳实践
博客: Android 6.0 运行时权限管理最佳实践 github: https://github.com/yanzhenjie/AndPermission
- Android 6.0权限全面详细分析和解决方案
原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...
- Android 6.0权限
在android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限. 只有那些targ ...
- Android 6.0 权限管理
google官方例子: https://github.com/googlesamples/android-RuntimePermissions Android 6.0在我们原有的AndroidMani ...
随机推荐
- jquery file upload 后台收到的文件名中文乱码, filename中文乱码
在jQuery File Upload.js文件里,在以下这个js中有个成员叫做 _initXHRData, 是一个function, 在这个function的最后部分有一个if-else分支,如下:
- 查文件大小列表 MySQL问题
du -sh /* | sort -nr 打开网站发现Too many connections The server quit without updating PID file (/usr/loca ...
- deepin 2014 静态IP无法保存,临时方法
打开终端: #临时添加静态IP ifconfig eth0 [ip] netmask [掩码] #添加默认网关 route add default gw [网关] #添加DNS vim /etc/re ...
- LaTeX使用titlesec宏包改变章节编号形式的方法
1.titleformat宏包命令详解 LaTeX中可以用titlesec宏包中的titleformat命令来改变标题形式: 导入宏包: \usepackage{titlesec} 改变标题的代码如下 ...
- Eclipse工程乱码解决
eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...
- Lost Cows(BIT poj2182)
Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10609 Accepted: 6797 Descri ...
- php设置和获取变量类型
1. 获取变量类型 gettype($a); 2. 设置变量类型 settype($a,'int'); 3. 测试函数 is_array();是否数组 is_string();是否字符串 is_obj ...
- css案例学习之div ul li a 实现导航效果
效果 代码 <html> <head> <title>无需表格的菜单</title> <style> body{ background-co ...
- First Missing Positive 解答
Question Given an unsorted integer array, find the first missing positive integer. For example,Given ...
- 什么是优先级队列(priority queue)?
有时候我们需要在某个元素集合中找到最小值和最大值 .优先级队列抽象数据(Priority Queue ADT)模型是我们能够使用的方法之一,这是一种支持插入和删除最小值(DeleteMin)或者最大值 ...