Android6.0动态权限获取详解

在Android6.0出来之前,大家基本都是在清淡配置文件中间添加系统权限。但在Android6.0之后很多权限需要动态获取。如拍Sd卡的写入,写出、震动,等等。

这里为大家简单的介绍一下如何进行动态权限的获取,以及如何编写动态权限封装类。

这里以获取本地相机拍照为例。

一共两步,1、创建动态权限获取类。2、调用。

1、先创建一个动态权限的封装类PermissionTool.class

,已方便在其他类里面使用(不建议写在Acticity里面)

public class PermissionTool { private Context context;

final public static int REQUEST_CODE_ASK_CAMERA = 125;//相机权限 final public static int REQUEST_CODE_ASK_PHOTOS = 126;//相册权限 public PermissionTool(Context context) { this.context = context; }

//动态获取相机权限 public boolean onCamera(){

if (Build.VERSION.SDK_INT >= 23) { int checkCallPhonePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA);

//注意这里是用于判断app是否以获取到了相应的权限,若没有。则申请获取。其中REQUEST_CODE_ASK_CAMERA相当于识别码,用于告诉Activity动态获取了相机权限,方便在Activity的onRequestPermissionsResult回调方法

if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.CAMERA},REQUEST_CODE_ASK_CAMERA); return false; }else{ //上面已经写好的拨号方法 return true; } } else { //上面已经写好的拨号方法 return true; }}//动态获取相册权限public boolean onPhotos(){ if (Build.VERSION.SDK_INT >= 23) {

int checkCallPhonePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE); if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE_ASK_PHOTOS); return false; }else{ return true; } } else { return true; } }

}

2、接下来就是调用

直接在需要的地方调用

PermissionTool permissionTool=new PermissionTool(this);

if(permissionTool.onCamera()){

//如果返回是true说明已有权限直接写你的逻辑代码

//如果返回是false,这时候Activity会在用户动态赋予app权限之后自动调用onRequestPermissionsResult()这个方法

}

//动态权限获取返回 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) {//根据requestCode判断获取的是哪个权限,以便进行相应的处理 case REQUEST_CODE_ASK_PHOTOS://相册权限以获取 break; case REQUEST_CODE_ASK_CAMERA://相机权限以获取 break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }

BUT:

部分情况下可能会出现即使使用了onRequestPermissionsResult()之后,但在用户动态给了权限之后没用运行改方法

此时我们只需要让Activity继承ActivityCompat.OnRequestPermissionsResultCallback这个接口。 

猜你喜欢

转载自blog.csdn.net/chxc_yy/article/details/81298838