Android高效处理权限——EasyPermissions框架的使用

一、android6.0以后的危险权限介绍

(注意:Android O 8.0对于权限更加严格,下面会说一下8.0)
android6.0以后有些危险权限需要手动去授权,就有了运行时权限的处理。下面的表格就是危险权限组:

权限组名 权限名
CALENDAR 日历 READ_CALENDAR
WRITE_CALENDER
CAMERA 相机 CAMERA
CONTACTS 联系人 READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATION 定位 ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONE 麦克风 RECORD_AUDIO
PHONE 电话 READ_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORS 传感器 BODY_SENSORS
SMS 短信 Short Message Service
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE 数据存储 READ_EXTRAL_STRORAGE
WRITE_EXTERNAL_STORAGE

二、传统的权限申请过程:

1、在AndroidManifest文件中添加需要的权限。
2、检查权限是否授权
3、申请权限
4、处理授权的结果

以定位权限为例:

 

1.首先在请单文件中声明

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


2.检查权限是否授权

if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_FINE_LOCATION)
    != PackageManager.PERMISSION_GRANTED) {
    //没有授权,编写申请权限代码
}else{
//已经授权,执行操作代码
}   

基本上调用checkSelfPermission()函数传入权限参数,返回的结果又两个:
如果是已授权的权限,该方法返回结果是 PackageManager.PERMISSION_GRANTED 常量为 0,
如果是未授权的权限,该方法返回结果是 PackageManager.PERMISSION_DENIED 常量为 -1。
这样就可以判断是否已经授权,来进行下一步的操作。

 

3.如果没有授权,需要申请权限

ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
            0);

这是一个异步的方法,第一个参数是Context;第二个参数是需要申请的权限的字符串数组(这个是支持同时申请多个权限,系统会逐个询问是否授权);第三个参数为请求码requestCode,主要用于回调的时候检测。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值