6.0以上權限封裝再版,另修復了重複彈出去設置對話框的bug

import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;

import java.util.HashMap;

/**
 * Created by YuX on 2018/7/9 13:24
 * ^_^ qq:565749553
 */
public class BegPermissionsUtils {
    private AppCompatActivity activity;
    private TodoBackFromBeg backDo;

    public BegPermissionsUtils(AppCompatActivity activity, TodoBackFromBeg backDo) {
        this.activity = activity;
        this.backDo = backDo;
    }

    public static final String[] begRWPermissons = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
    public static final String[] begCAMERA = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
    public static final String[] begLOCATION = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
    public static final String[] begQRCODE = {Manifest.permission.CAMERA};

    public static final int BEGRWCODE = 1;
    public static final int BEGAMERA = 2;
    public static final int BEGCAMERA2 = 3;
    public static final int BEGLOCATIONCODE = 4;
    public static final int BEGQRCODE = 5;


    /**
     * 這個方法用於動態申請權限
     *
     * @param begPermissions 需要檢測的一些權限
     */
    public boolean checkPermissions(String[] begPermissions, int requestCode) {
        boolean result = true;
        if (Build.VERSION.SDK_INT >= 23) {
            for (int i = 0; i < begPermissions.length; i++) {
                int checkedPermissionResult = activity.checkSelfPermission(begPermissions[i]);
                if (checkedPermissionResult != PackageManager.PERMISSION_GRANTED) {
                    goBegPermission(begPermissions, requestCode);
                    result = false;
                    return result;
                }
            }

        }
        return result;
    }

    /**
     * 彈出請求權限對話框
     */
    private void goBegPermission(String[] begPermissions, int requestCode) {

        if (Build.VERSION.SDK_INT >= 23) {
            activity.requestPermissions(begPermissions, requestCode);
        }
    }

    /**
     * 去設置
     */

    private void gotoSetting() {
        Intent intent = new Intent();
        Uri packageURI = Uri.parse("package:" + activity.getPackageName());
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(packageURI);
        activity.startActivity(intent);
    }

    /**
     * 彈出去設置界面對話框
     */
    private synchronized void showGotoSetting(int requestCode) {

            final int code = requestCode;
            HashMap<String, DialogInterface.OnClickListener> clickOptionMap = new HashMap<String, DialogInterface.OnClickListener>();
            clickOptionMap.put("去設置", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    gotoSetting();
                    backDo.settingBack(code);
                    isshow=false;
                }
            });
            clickOptionMap.put("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    backDo.cancelTodo(code);
                    isshow=false;
                }
            });
            showButtonDialog("未開啓用戶權限,去設置", "開啓用戶權限",
                    clickOptionMap);

    }
    private synchronized void showButtonDialog(String message,
                                               String title, HashMap<String, DialogInterface.OnClickListener> map) {

            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setMessage(message);
            builder.setTitle(title);
            boolean bool = true;
            boolean bool2 = true;
            for (String key : map.keySet()) {
                if (bool) {
                    builder.setPositiveButton(key, map.get(key));
                    bool = false;
                } else if (bool2) {
                    builder.setNegativeButton(key, map.get(key));
                    bool2 = false;
                } else {
                    builder.setNeutralButton(key, map.get(key));
                }
            }
            builder.setCancelable(false);
            builder.create().show();
    }
    public static boolean isshow;

    public void onRequestPermissionsResult(int requestCode,
                                           String[] permissions, int[] grantResults) {


        for (int i = 0; i < permissions.length; i++) {
            if (Build.VERSION.SDK_INT >= 23) {

                int checkedPermissionResult = activity.checkSelfPermission(permissions[i]);
                if (checkedPermissionResult != PackageManager.PERMISSION_GRANTED) {
                    if (!activity.shouldShowRequestPermissionRationale(permissions[i])) {
                        if(!isshow) {
                            isshow = true;
                            showGotoSetting(requestCode);
                        }
                        return;
                    }
                    backDo.cancelTodo(requestCode);
                    return;
                }
            }
        }


        backDo.backTodo(requestCode);

    }


    public interface TodoBackFromBeg {
        void backTodo(int requestCode);

        void cancelTodo(int requestCode);

        void settingBack(int requsetCode);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章