前言
android应用运行过程中某些功能的使用需要通过权限管理器申请相应权限,应用才可以正常使用该功能。比如相机权限、存储权限、内存访问权限、网络权限。
在android6.0(sdk23)之前,安卓的权限申请是静态申请权限,android6.0之后权限申请需要变成动态申请权限。
一、静态权限申请
android6.0之前开发者开发应用时希望应用拥有手机的什么权限,只需要在应用的注册清单(AndroidManifest.xml)的manifest节点上注册,程序就可以正常使用相应功能。具体如下示例:
//相机权限
<uses-permission android:name="android.permission.CAMERA" />
//写存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//读存储权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
二、动态申请权限
安卓6.0之后应用想要获取权限,需要在静态权限注册的前提下在代码中开启动态权限申请供用户选择开启还是禁止相应权限。如下示例
1.静态注册权限
//相机权限
<uses-permission android:name="android.permission.CAMERA" />
//写存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//读存储权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.提示用户是否赋予权限
程序运行过程中,开发者定义好程序需要使用到的权限,判断是否已经拥有该权限,提示用户同意赋予权限。
//定义需要的权限列表
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
/**
* 申请权限
*/
private void checkPermissions(){
//如果系统大于android6.0,进行动态权限申请
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int i = ContextCompat.checkSelfPermission(this, permissions[0]);
int l = ContextCompat.checkSelfPermission(this, permissions[1]);
int m = ContextCompat.checkSelfPermission(this, permissions[2]);
// 权限是否已经 授权 GRANTED---授权 DINIED---拒绝,判断需要的权限列表中是否有权限还没拥