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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据

通过SoapUI发送POST请求&#xff0c;请求的body是JSON格式的数据&#xff1a; data{"currentDate":"2015-06-19","reset":true} 而且通过Fiddler抓取页面报文 Content-Type 是 application/x-www-form-urlencoded 一开始我将Content-Type appl…

oracle -239报错,解决: ./check_oracle_health --connect orcl --mode connection-time 报错的问题...

错误提示./check_oracle_health --connect orcl --mode connection-timeCRITICAL - cannot connect to orcl. install_driver(Oracle) failed: Cant locate DBD/Oracle.pm in INC (INC contains: . /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_per…

【python 3.6】调用另一个文件的类的方法

文件1&#xff1a;test12.py 文件2&#xff1a;test13.py 文件1 如下&#xff1a; #!/usr/bin/python # -*- coding: utf-8 -*-class abcd(object):def __init__(self):passdef pr(self):return("KKKKKKK") if __name__"__main__":abcd().pr() 文件2&#…

el-button 图标显示在字后边_Excel和Visio联姻,自动生成跨职能流程图,还能用图标标记状态,太牛了!...

正文共&#xff1a;1332 字 21 图预计阅读时间&#xff1a; 4 分钟Visio是Office软件系列中的负责绘制流程图和示意图的软件&#xff0c;创建具有专业外观的Visio图表&#xff0c;以便用户更好地理解和分析。企业管理中&#xff0c;业务流程在不同部门间流转&#xff0c;涉及提…

mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap...

由于mybatis简单易学&#xff0c;比起Hibername来&#xff0c;更容易上手&#xff0c;代码也能自动生成。这几天研究了下代码自动生成的&#xff0c;参考&#xff1a;http://0609xiaohua.iteye.com/blog/1453570但是把代码复制进来&#xff0c;运行了下&#xff0c;却跑不起来&…

Bootstrap系列 -- 32. 按钮垂直分组

实际运用当中&#xff0c;总会碰到垂直显示的效果。在Bootstrap框架中也提供了这样的风格。我们只需要把水平分组的“btn-group”类名换成“btn-group-vertical”即可。 <div class"btn-group-vertical"><button class"btn btn-default" type&quo…

oracle确实表达式,ORACLE正规表达式

[导读]Oracle使用正则表达式离不开这4个函数&#xff1a;Oracle使用正则表达式离不开这4个函数&#xff1a;1。regexp_like2。regexp_substr-- select regexp_substr(aaa,bb,ccccc,ddd,vvv,[^,],1,4) from dual3。regexp_instr4。regexp_replace参数1。source_char&#xff0c;…

【SpringBoot笔记】SpringBoot整合Druid数据连接池

废话少说&#xff0c;按SpringBoot的老套路来。 【step1】&#xff1a;添加依赖 <!-- 数据库连接池 --> <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.25</version> </depende…

python名字排序_python 中文排序(按拼音)

pypinyin1 排序 仅按拼音首字母 排序安装pypinyinpip3 install pypinyin代码from pypinyin import lazy_pinyinchars [鑫,鹭,榕,柘,珈,骅,孚,迦,瀚,濮,浔,沱,泸,恺,怡,岷,萃,兖]chars.sort(keylambda char: lazy_pinyin(char)[0][0])print([lazy_pinyin(char) for char in cha…

struts2中非表单标签的使用 componen

2. component标签 component标签用于使用自己的自定义组件&#xff0c;这是一个非常灵活的用法&#xff0c;如果经常需要使用某个效果片段&#xff0c;就可以考虑将这个效果片段定义成一个自定义组件&#xff0c;然后在页面中使用component标签来使用该自定义组件。因为使…

oracle 11g r2 rac中节点时间不同步,Oracle11gR2安装RAC错误之--时钟不同步

系统环境&#xff1a; 操作系统&#xff1a;RedHat EL5 Cluster&#xff1a; Oracle GI(Grid Infrastructure) Oracle&#xff1a; Oracle 11.2.0.1.0 如图所示&#xff1a;RAC 系统架系统环境&#xff1a;操作系统&#xff1a;RedHat EL5Cluster&#xff1a; Oracle GI(Grid I…

vue中pdf预览组件_Vue+ElementUI使用vue-pdf实现预览功能

Vue ElementUI项目中使用vue-pdf实现简单预览&#xff0c;供大家参考&#xff0c;具体内容如下1、安装 vue-pdfnpm install --save vue-pdf2、在vue页面中导入对应的组件我这是通过点击 预览 按钮 获取id打开一个dialog来实现:visible.sync"viewVisible" width"…

酒店预定系统

系统功能模块功能图 用例图 E-R图 转载于:https://www.cnblogs.com/qlly-20/p/9052461.html

leetcode 145. Binary Tree Postorder Traversal

传送门 145. Binary Tree Postorder Traversal QuestionEditorial SolutionMy SubmissionsTotal Accepted: 106482Total Submissions: 291244Difficulty: HardGiven a binary tree, return the postorder traversal of its nodes values. For example:Given binary tree {1,#…

74-A/D指标,Accumulation/Distribution,积累/派发线,离散指标.(2015.7.1)

A/D指标&#xff0c;Accumulation/Distribution积累/派发线&#xff0c;离散指标观井映天2015.7.1转载于:https://www.cnblogs.com/i201102053/p/10626638.html

linux 密码修改下次,问题:如何强制用户在下次登录Linux时更改密码

当你使用默认密码创建用户时&#xff0c;你必须强制用户在下一次登录时更改密码。当你在一个组织中工作时&#xff0c;此选项是强制性的。因为老员工可能知道默认密码&#xff0c;他们可能会也可能不会尝试不当行为,看到下图会不会有为用户担心的感觉&#xff1a;使用 passwd 命…

tableau获取筛选器值_认识Tableau中的筛选器

Tableau中的筛选器&#xff1a;(1)提取筛选器(2)数据源筛选器(3)上下文筛选器(4)维度筛选器(5)度量筛选器(6)参数筛选器(7)表计算筛选器(8)页面筛选器对筛选器进行简单的分类&#xff1a;数据层(提取筛选器、数据源筛选器、上下文筛选器、参数筛选器)视图层(维度筛选器、度量筛…

类与对象的实例属性

class Chinese: countrychina def __init__(self,name): self.namename def playball(self,ball): print(%s正在打%s%(self.name,ball))name1input(>>>)#输入输出尽量别放函数里p1Chinese(name1)p1.playball(足球)print(p1.country)#china,类的…

svn的merge使用例子

先说说什么是branch。按照Subversion的说法&#xff0c;一个branch是某个development line&#xff08;通常是主线也即trunk&#xff09;的一个拷贝&#xff0c;见下图&#xff1a; branch存在的意义在于&#xff0c;在不干扰trunk的情况下&#xff0c;和trunk并行开发&#xf…