上篇博客解决了安卓权限的调用和成功与否的验证
流程: 申请权限--->已授权--->直接操作
---->未授权--->返回fasle
可参考 :https://blog.youkuaiyun.com/u013203480/article/details/78789055
但是对于用户拒绝,并且不再提示没有一个好的处理,因此在此基础上改进了代码,如有不足之处请及时告知
第二版流程
需要更改的代码
1.使用
PermissionManager.getInstance().getCameraPermission(context, new PermissionManager.RequestPermission() {
@Override
public void isOk() {
Log.e("isOK","++++++++++++++++++++++++++++++++++++");
}
@Override
public void never() {
Log.e("never","++++++++++++++++++++++++++++++++++++");
}
@Override
public void refuse() {
Log.e("refuse","++++++++++++++++++++++++++++++++++++");
}
});
2.管理类
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
/**
* Created by biyunlong on 2017/7/7.
* Make progress every day
*/
public class PermissionManager {
private String storage=Manifest.permission.WRITE_EXTERNAL_STORAGE;
private String camera =Manifest.permission.CAMERA;
private final int requestcode_camera=1;
private static PermissionManager permissionManager;
private RequestPermission requestPermission;
public static PermissionManager getInstance(){
if(null==permissionManager){
permissionManager=new PermissionManager();
}
return permissionManager;
}
//照相机和文件权限
public void getCameraPermission(Context context,RequestPermission requestPermission){
this.requestPermission=requestPermission;
PermissionUtil.getInstance().checkPermission(context,new String[]{storage,camera},requestcode_camera);
}
/**
* 一个或多个权限请求结果回调
*
* @param requestCode
* @param permissions
* @param grantResults
*/
public void onRequestPermissionsResult(Activity context,int requestCode, String[] permissions, int[] grantResults) {
if(requestPermission==null){
return;
}
boolean hasAllGranted = true;
for (int i = 0; i < grantResults.length; ++i) {
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
hasAllGranted = false;
// 可以推断出用户选择了“不在提示”选项,在这种情况下需要引导用户至设置页手动授权
if (!ActivityCompat.shouldShowRequestPermissionRationale(context, permissions[i])) {
requestPermission.never();
} else {
//权限请求失败,但未选中“不再提示”选项
requestPermission.refuse();
}
break;
}
}
if (hasAllGranted) {
//权限请求成功
requestPermission.isOk();
}
}
public interface RequestPermission{
public void isOk();
public void never ();
public void refuse();
}
}
3.基类
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
PermissionManager.getInstance().onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}