随着android版本的升级,对权限的管理越来越严格,很多权限都需要动态申请了
下面,我就简单的说说如何动态申请权限
1、在 AndroidManifest.xml 里设置权限
2、创建一个类,保存需要动态申请的权限
3、在需要的时候,申请权限
4、权限申请结果
1、在 AndroidManifest.xml 里设置权限
比如:拍照、写入储存卡的权限,就需要动态获取,于是,在 AndroidManifest.xml 里写入权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
2、创建一个类,保存需要动态申请的权限
同时,我创建了 Jurisdiction.java 这个类,来保存这些权限,如下:
import android.Manifest;
public class Jurisdiction {
public static String[] PERMISSION = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
}
3、在需要的时候,申请权限
定义一个方法 setPermissions() 在里面调用 第二步里定义的 PERMISSION 完成权限的动态申请
private void setPermissions() {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, Jurisdiction.PERMISSION,1);
}else{
Log.i("Jurisdiction","权限申请ok");
}
}
4、权限申请结果
@Override
public void onRequestPermissionResult(int requestCode,String[] permission,int[] grantResults){
switch(requestCode){
case 1:
if(grantResult.length > 0 && grantResults[0] == packageManager.CAMERA){
//用户同意了权限的申请,下面就是实现权限相关的逻辑
try{
//实现调用逻辑
}catch(SecurityException e){
e.printStackTrace();
}
}else{
//用户没有同意权限的申请,提示用户:没有同意该权限的申请
Toast.makeTest(this,"您没有同意调用摄像机权限的申请!",Toast.LENGTH_SHORT).show();
}
break;
case 2:
if(grantResult.length > 0 && grantResults[1] == packageManager.WRITE_EXTERNAL_STORAGE){
//用户同意了权限的申请,下面就是实现权限相关的逻辑
try{
//实现调用逻辑
}catch(SecurityException e){
e.printStackTrace();
}
}else{
//用户没有同意权限的申请,提示用户:没有同意该权限的申请
Toast.makeTest(this,"您没有同意调用***权限的申请!",Toast.LENGTH_SHORT).show();
}
break;
defult:
break;
}
}
注:在 AndroidManifest.xml 里的权限,找到需要动态申请的,都可以写入 第二步的类里面,这样可以一次性注册进去
如果不需要一次性注册,也可以写多个 PERMISSION ,当然名称改变一下,一样的用第三步在需要的时候向用户
申请。