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 ...
随机推荐
- git commit的--amend选项
git commit --amend常常用来修改某个branch上最顶端的commit,大多数情况下,这个命令给人的感觉是用新的commit替换了原来的commit.git commit --amen ...
- 配置Tomcat中的Context元素中的中文问题
发布一个名叫helloapp的web应用,helloapp位于D:\我\helloapp.发布的方式是通过配置<CATALINA_HOME>/conf/Catalina/localhost ...
- DLL技术应用04 - 零基础入门学习Delphi47
DLL技术应用04 让编程改变世界 Change the world by program 利用DLL实现窗体重用 利用 Delphi 的 DLL 功能,不但能够实现过程和函数重用,而且还可以实现窗体 ...
- Ring3下Hook NtQueryDirectoryFile隐藏文件
NTSTATUS WINAPI Hook_NtQueryDirectoryFile(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,IN PIO_APC_R ...
- Fragment与Activity相互传递数据:
Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法即可将Bundle数据包传给F ...
- zend studio使用入门
使用zend studio8建立项目 使用PHP开发工具zend studio8进行PHP网站开发,就需要建立(导入)相应的项目,方法如下:右键左侧Workspace,选择New | PHP Proj ...
- JavaScript 输入验证器工具
前注:在数据添加的时候很多地方都会涉及到数据的合法性验证,所以有必要提炼成为一个工具.今天偶然间点错网页,弹出一个游戏界面,本来是想看怎么实现的背景音乐的加载的,结果看到一个注册页面的验证JS,所以这 ...
- LeeCode-Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- JAVA I/O流 之入门
I/O流分类: 根据处理的数据类型不同 字节流 字符流 根据流向不同 输入流 输出流 根据功能不同 节点流:直接与数据源相连,读入或读出. 处理流:直接使用节点流,读写不方便,为了更快的读写文件,才有 ...
- svn之——linux下清除svn的用户名和密码
问题:之前用的svn账号权限不够,需要使用别的账号,所以提出需求——怎么使用新的svn账号进行操作 方法一: linux下删除~/.subversion/auth即可清除之前的用户名和密码:rm -r ...