android 运行时权限一览和使用方法

一、什么是动态权限?

在android6.0前,所有的权限都只需要在Manifest中写。如图所示

android 运行时权限一览和使用方法_第1张图片

那么为什么6.0后需要添加运行时权限?

因为现在很多的软件为了以防万一,都先将权限申请完。比如明明一个计时器软件,却需要用户授权相册,联系人等权限。如果不授权,就不给用。为了改变这种情况,则在6.0后推出了运行时权限。用户不必再安装软件时就授权所有的权限,而是在运行时需要用到什么权限就申请什么权限。

当然android一共有一百多种权限,如果全部运行时申请的话,又未免过于繁琐,所以只需要申请一些重要的权限。因此android将所有的权限分为两种,一种为普通权限,直接在清单文件中申请即可。另一种是危险权限,涉及用户利益的,比如隐私,资费等,就需要运行时进行申请。

二、有哪些运行时权限?

这里将其列出,一共9组24个。需要注意的是,权限按组分类,当一个权限被同意时,同一组内的权限自动同时被授权。

权限组名 权限名称
CALENDAR(日历) READ_CALENDAR
WRITE_CALENDAR
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
ERAD_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORS(传感器) BODY_SENSORS
SMS(短信) SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE(存储卡) READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE

 三、怎么使用?

注:之前一直有误会。别的讲的也模糊不清。不管是不是危险权限,都需要现在清单文件中列出来,危险权限在代码中还需要额外再申请。

按照以下3步进行,这里以打电话权限为例。因为打电话可能涉及用户的话费,所以列为危险权限。

1、为了防止重复授权,需要进行检查是否已经用户授权。

checkSelfPermission(@NonNull Context context, @NonNull String permission)

第一参数传入上下文 

第二参数则是需要申请的权限,以字符串的形式。

PackageManager.PERMISSION_GRANTED

如果等于,则说明已经授权

2、没有授权,就开始授权

requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode) 

第一参数 常量activity 和上下文好像没有太多区别

第二参数 字符串组 用来输入需要的权限

第三参数 申请码 自定义随便输,只需要唯一就可

3、开始调打电话的方法

  //第一步,判断是否已经授权
        if (ContextCompat.checkSelfPermission(MainActivity.this,     Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED){
            //第二步,如果没有授权,就授权
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
        }else{
            call();//第三步开始打电话
        }

这里采用《android 第一行代码》里面的运行效果图。运行后,会跳出一个对话框,请求权限

android 运行时权限一览和使用方法_第2张图片

你可能感兴趣的:(android,java)