• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 说说Android6.0动态申请权限的那些坑,android6.0动态权限

说说Android6.0动态申请权限的那些坑,android6.0动态权限

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android6.0动态权限,android6.0权限,android6.0权限问题,android6.0权限管理,android6.0权限大全等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

说说Android6.0动态申请权限的那些坑,android6.0动态权限


白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒。

  首先要知道哪些坑,就得先了解一些定义和基本使用方式。

那么先介绍一下动态申请的权限分组情况。

  下面的权限组是由谷歌官方定义的,目的是在申请权限时,只要用户允许同一权限组的任意一条权限,那么该组的其他权限也就默认是允许的。不过据高人介绍,在使用时最好是用到哪个权限就具体的请求该权限,因为保不齐哪天谷歌一高兴就把权限组换了甚至删了、

group:android.permission-group.CONTACTS
  permission:android.permission.WRITE_CONTACTS
  permission:android.permission.GET_ACCOUNTS
  permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
  permission:android.permission.READ_CALL_LOG
  permission:android.permission.READ_PHONE_STATE
  permission:android.permission.CALL_PHONE
  permission:android.permission.WRITE_CALL_LOG
  permission:android.permission.USE_SIP
  permission:android.permission.PROCESS_OUTGOING_CALLS
  permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission-group.CALENDAR
  permission:android.permission.READ_CALENDAR
  permission:android.permission.WRITE_CALENDAR

group:android.permission-group.CAMERA
  permission:android.permission.CAMERA

group:android.permission-group.SENSORS
  permission:android.permission.BODY_SENSORS

group:android.permission-group.LOCATION
  permission:android.permission.ACCESS_FINE_LOCATION
  permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE
  permission:android.permission.READ_EXTERNAL_STORAGE
  permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.MICROPHONE
  permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS
  permission:android.permission.READ_SMS
  permission:android.permission.RECEIVE_WAP_PUSH
  permission:android.permission.RECEIVE_MMS
  permission:android.permission.RECEIVE_SMS
  permission:android.permission.SEND_SMS
  permission:android.permission.READ_CELL_BROADCASTS

 

其实权限组的定义很简单,下面简单介绍下动态申请权限的步骤。

第一步,检查app拥有的权限。 

1 if(ContextCompat.checkSelfPermission(
2     mActivity,Manifest.permisson.READ_CONTACTS)
3     != PackageManager.PERMISSION_GRANTED) {
4     //当前Activity没有获得READ_CONTACTS权限时
5 }else{
6     //否则已允许
7 }

第二步,申请权限。

1 ActivityCompat.requestPermissions(
2     mActivity,
3     new String[]{Manifest.permission.READ_CONTACTS},
4     REQUEST_CODE_PERMISSION_CONTACTS);

 

第三步,权限申请回调方法。

 1 @Override
 2 public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
 3     switch (requestCode) {
 4         case REQUEST_CODE_PERMISSION_CONTACTS: {
 5             if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 6                 //用户已授权
 7             } else {
 8                 //用户拒绝权限
 9             }
10             return;
11         }
12     }
13 }

 

如此三步,看上去很简单,可真要用起来可就没有那么简单了。下面就说说这里边的坑吧。

 

坑一、权限申请只能在Activity或者Fragment的上下文中,不能用getApplicationContext()。

  由于我们项目在应用初始化时要获取内存的存储路径并创建一系列文件缓存,这些操作都是写在Application的onCreate()中调用不同的Util工具类进行的,所以在Android6.0以上这么写就有点不太靠谱了。目前我的解决措施是在应用程序初始化时,先判断SDK版本,只对版本号小于23的app创建缓存文件,高于23的则在进入Activity之后再初始化。

 

坑二、权限申请时使用的请求码必须小于16。

  至于什么原因不太清楚,可能谷歌公司认为权限本来就不多,没必要将请求码弄得很大占用多余的内存吧。说到请求码,也就是上面代码中未定义的常量值REQUEST_CODE_PERMISSION_CONTACTS,如果你定义的这个值超过了15,运行时就会报安全异常,提示请求码必须小于16。

 

目前来说这两个坑就够我忙活一天的了,看来还是经验不足啊,以后还要多多吸取经验。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 说说Android6.0动态申请权限的那些坑,android6.0动态权限
  • Android6.0权限管理
  • Android 6.0 运行时权限处理完全解析,android6.0

相关文章

  • 2017-11-18android 多线程断点续传视频列表
  • 2017-05-26android fragment生命周期应用
  • 2017-05-26抽取的BaseFragment和LoadingPage,basefragment
  • 2017-05-26Android特效专辑(八)——实现心型起泡飞舞的特效,让你的APP瞬间暖心
  • 2017-05-26Android源码解析--SwipeMenuListView仿QQ聊天左滑
  • 2017-05-26安卓--获取应用版本名称与版本号,安卓--版本版本号
  • 2017-05-26Android开发学习—— Broadcast广播接收者,androidbroadcast
  • 2017-05-26Android小知识,理财小知识
  • 2017-05-26getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles
  • 2017-05-26android开发之路04(初级android工程师必会,你懂得!),04android

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 解决CentOS 7 history命令不显示操作记录的时间和用户身份问题
    • Android中使用Notification实现进度通知栏(示例三),notification进度条
    • 自定义控件——开关按钮ToggleButton,控件togglebutton
    • Android API Guides---App Widgets
    • 初识genymotion安装遇上的VirtualBox问题,genymotionvirtualbox
    • andriod 资源文件之存取操作,andriod资源文件
    • android studio 图片资源的放置位置,你中枪了吗?
    • 一起来学习Android自定义控件
    • MAT使用入门,mat入门
    • Android常见问题集锦

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有