Android6.0后动态权限
来源:互联网 发布:海岛奇兵升船数据 编辑:程序博客网 时间:2024/06/06 10:50
permissions
在6.0时代以前,程序所需的权限都在安装时全部确认后安装成功,这就出现即使应用不到的权限也要在安装时全部授权。
在6.0时代,可以在程序运行时获取相关权限,展开一个对话框询问是否授予该程序相应权限。
从第二次开始运行的时候,会增加一个选项框,“以后不再询问”,如果选择了这个选项,那么以后程序不会再询问是否授予权限了。
要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的requestPermissions() 方法。
{ /** * 方法返回值为PackageManager.PERMISSION_DENIED * 或者PackageManager.PERMISSION_GRANTED。 * 当返回DENIED就需要进行申请授权了 * 判断是否有这个权限 */ int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR); if (permissionCheck == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "已被授予权限,continue", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "未权限,try request", Toast.LENGTH_SHORT).show(); if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_CALENDAR)) { // 在这里做需要权限的说明,根据需要来做 判断是否需要自己定义请求权限的说明窗口 Log.i("TAG","SSSS"+ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_CALENDAR)); Toast.makeText(MainActivity.this, "需要此权限才可在6.0及以上系统拍照", Toast.LENGTH_SHORT).show(); } else { // 申请权限 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_CALENDAR, Manifest.permission.READ_CALENDAR}, 1001); } }}
/** * 申请权限回调 * 在申请权限后自动执行此方法 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1001: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "权限,apply sucess", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "权限,apply fail", Toast.LENGTH_SHORT).show(); } return; } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
以上为动态权限申请方法,说一下在申请权限的时候遇到的问题:
由于国产机型不适配的问题,(比如小米),在第一次申请拒绝后,第二次申请时shouldShowRequestPermissionRationale不会返回true
,并且会回调申请失败,也就是说在第一次决绝后默认勾选了不再提示,并且即使再次申请权限,也不会弹出申请权限的框!
这个问题比较致命,不能给用户授权失败的说明,解决办法是用开源的申请权限的框架。
这个开源库名叫AndPermission:https://github.com/yanzhenjie/AndPermission,经过我的实践是完全解决了上述问题,推荐大家使用。
阅读全文
0 0
- Android6.0后动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- android6.0动态权限
- Android6.0 动态权限
- android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态权限
- Android6.0动态获取权限
- Android6.0动态权限处理
- android6.0 动态申请权限
- Android6.0 动态权限设置
- android6.0动态获取权限
- Android6.0动态权限处理
- API版本兼容@SuppressLint 和 @TargetApi
- 负数除以整数的余数怎么算?
- 课上一节课时间写的《物联网工程》课程报告
- Gson 解析时间格式问题
- 找到编译后的.class文件
- Android6.0后动态权限
- 过滤器、监听器、拦截器
- Qt5 By CMake
- 序列化和反序列化的简单理解
- sharpen
- 微信小程序开发(6) SSL证书及HTTPS服务器
- LeetCode 53. Maximum Subarray
- hdu 1030 求最短路径
- Mysql对时间的统计