上篇博客解决了安卓权限的调用和成功与否的验证
流程: 申请权限--->已授权--->直接操作
---->未授权--->返回fasle
可参考 :https://blog.csdn.net/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); }