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