安卓权限工具类(二)

上篇博客解决了安卓权限的调用和成功与否的验证

流程:  申请权限--->已授权--->直接操作

                        ---->未授权--->返回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);
    }




猜你喜欢

转载自blog.csdn.net/u013203480/article/details/80029880