6.0权限动态适配(一)(存在问题)
来源:互联网 发布:360数据恢复软件比较差 编辑:程序博客网 时间:2024/06/03 16:42
场景
默认情况,APP不获取任何权限。当APP需使用任何被设备保护权限,如发送网络请求、拍照、发送短信等,须由开发者获取对应权限。Android6.0前,开发者获取权限非常简单,只需要在AndroidManifest.xml文件中申明,所有权限会在安装时处理。比如用户安装APP,安装前系统弹出对话框,用户可浏览该应用所获取设备权限有哪些。但是用户安装权限后无任何更改机会。虽利于开发者处理权限,但对用户而言,体验效果并不好。Android6.0显著改变是支持用户随时更改APP权限,即便APP正在运行中。
分类
Android6.0把权限分常规权限、运行时权限两种。
常规权限
释义
对于常规权限,只需在AndroidManifest.xml文件中申明即可。系统不会弹出任何提示用户是否开启权限弹窗,即静默权限,包括网络访问、获取网络状态等。
运行时权限
释义
所需权限不在常规权限范围内,便需在代码中动态获取权限,系统会弹出弹窗提示户是否开启权限。
步骤
在AndroidManifest.xml文件中申明所需运行时权限
代码动态获取。代码如下:
/* * Called when the user is performing an action which requires the app to take photos. * */ private void requestTakePhotosPermission() { /* * Use the support library version ContextCompat. * checkSelfPermission(...) to avoid checking the build version since Context. * checkSelfPermission(...) is only available in Marshmallow. * Always check for permission (even if permission has already been granted) since the user can revoke permissions at any time through Settings. * 参数 上下文、权限、请求码 * */ if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { /* * The permission is NOT already granted. * Check if the user has been asked about this permission already and denied it. * If so, we want to give more explanation about why the permission is needed. * 第一次被拒绝,第二次访问时,提示用户为什么需要此权限 * */ if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.CAMERA)) { /* * Show our own UI to explain to the user why we need to use the permission and showing the default UI * */ } /* * Fire off an async request to actually get the permission. * This will show the standard permission request dialog UI. * 权限没有开启,请求权限 * */ ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, 1); } else { // 执行动作 } } /* * Callback with the request from calling requestPermissions(...) * 用户接受或者拒绝,申请权限会执行一个回调 * */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { // Make sure it's our original Permission request case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 执行动作 } else { ToastShort("获取权限失败!"); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); break; } }
引申
权限Groups
APP需大量权限时,若让开发者每次针对所需运行时权限弹出弹窗,显然是动态获取权限滥用。而权限群允许APP在某时间点同时申请多个权限。但请注意,大多数情况下,还是应单独获取单个权限。但例如下面情况,当需获取读取联系人权限,向用户申请,处理完后,需写权限,又向用户申请,此时可为它们设置权限群,当申明读取联系人权限同时,申请写权限,如此便不必再次申请写权限。
问题
使用小米4S测试,第一次弹出对话框询问是否同意授予权限,同意没问题;拒绝后再次进入界面,无对话框提示,即静默拒绝权限申请。
阅读全文
0 0
- 6.0权限动态适配(一)(存在问题)
- 6.0权限动态适配(二)(存在问题)
- 6.0权限动态适配(四)(存在问题)
- 6.0权限动态适配(五)
- thinkphp5 权限问题(一)
- 权限动态适配(三)
- 6.0动态申请权限问题
- android 6.0动态权限问题
- 国内网管职业教育存在的问题(一)
- NYOJ 一笔画问题(判断存在欧拉通路)
- Android 6.0动态权限适配
- 解决Android 6.0动态添加权限问题
- Android 6.0动态权限的相关问题
- 百度地图定位6.0动态权限问题
- 安卓6.0以上动态权限问题
- Android 6.0动态权限申请问题
- 动态规划之背包问题(一)
- 动态规划之背包问题(一)
- 2017七月、八月暑假集训总结
- 08.js.for循环
- Linq及Lamda表达式应用经验之 GroupBy 分组
- 算法竞赛入门例题3.2
- [Linux] Shell 中 $ 作用
- 6.0权限动态适配(一)(存在问题)
- 反省
- webmagic使用总结
- sqlplus 汉字乱码问题的解决——windows
- HDU1814 Peaceful Commission —— 2-sat 染色法
- HDU1576 A/B (扩展欧几里得求逆元)
- 2017.08.25【NOIP提高组】模拟赛A组
- Android混合开发之WebView使用总结
- mysql的多表查询的相关知识点