美文网首页
Android 请求权限,以及shouldShowRequest

Android 请求权限,以及shouldShowRequest

作者: wenju | 来源:发表于2021-07-12 18:01 被阅读0次

权限请求工具类

import android.app.Activity;
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 androidx.core.content.ContextCompat;

public class PermissionUtils {
    public static int PERMISSION_REQUEST_CODE = 124;

    /**
     * 跳转到系统界面
     */
    public static void openSettings(Context context) {
        Intent intent = new Intent();
        intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
        intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }


    /**
     * 多个权限判断是否同意
     *
     * @param permissions 权限请求数组
     */
    private static boolean isCheckSelfPermission = true;

    public static boolean checkSelfPermissions(Context context, String[] permissions) {
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(context, permission) !=
                    PackageManager.PERMISSION_GRANTED) {
                isCheckSelfPermission = false;
            }
        }
        return isCheckSelfPermission;
    }

    /**
     * 单个权限判断是否同意
     *
     * @param permissions 权限请求数组
     */
    public static boolean checkSelfPermission(Context context, String permissions) {
        return checkSelfPermissions(context, new String[]{permissions});
    }

    /**
     * 判断是否需要显示权限解释弹窗
     *
     * @param permissions 权限请求数组
     */
    private static boolean shouldShowRequestPermissionRationale = true;

    public static boolean shouldShowRequestPermissionsRationale(Activity activity, String[] permissions) {
        for (String permission : permissions) {
            if (!activity.shouldShowRequestPermissionRationale(permission)) {
                shouldShowRequestPermissionRationale = false;
            }
        }
        return shouldShowRequestPermissionRationale;
    }

    /**
     * 单个权限判断是否需要显示权限解释弹窗
     *
     * @param permissions 权限请求数组
     */
    public static boolean shouldShowRequestPermissionRationale(Activity activity, String permissions) {
        return shouldShowRequestPermissionsRationale(activity, new String[]{permissions});
    }

    /**
     * 用户为给权限,跳转到App设置界面,弹窗
     */
    public static void showPermissionsSystemAlert(final Activity context,String rationaleMessage) {
        new AlertDialog.Builder(context)
                .setTitle("Permissions required!")
                .setMessage(rationaleMessage)
                .setPositiveButton("GOTO SETTINGS", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
                openSettings(context);
            }
        }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialogInterface, int i) {
                context.finish();
            }
        }).setCancelable(false).show();
    }


    /**
     * 权限解释弹窗
     */
    public static void showPermissionsAlert(final Activity activity, String rationaleMessage, String[] permissions) {
        new AlertDialog.Builder(activity)
                .setTitle("Permissions required!")
                .setMessage(rationaleMessage)
                .setPositiveButton("GOTO SETTINGS", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                        activity.requestPermissions(permissions, PERMISSION_REQUEST_CODE);
                    }
                }).setCancelable(false).show();
    }

    /**
     * 请求权限
     */
    public static void requestPermissions(Activity activity, String[] permissions) {
        activity.requestPermissions(permissions, PERMISSION_REQUEST_CODE);
    }

简单使用

    public void permissionTest(View view) {
        if (PermissionUtils.checkSelfPermissions(this,permissions)) {
            //ToDO 权限已申请直接进行操作
        }else{
            PermissionUtils.requestPermissions(this,permissions);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PermissionUtils.PERMISSION_REQUEST_CODE) {
            String rationaleMessage = "Needs all permissions to work properly. Grant them in settings.";
            if (PermissionUtils.checkSelfPermissions(this,permissions)) {
                //ToDO 权限已申请成功,执行操作
            } else if (PermissionUtils.shouldShowRequestPermissionsRationale(this, permissions)) {
                PermissionUtils.showPermissionsAlert(this, rationaleMessage, permissions);
            } else {
                PermissionUtils.showPermissionsSystemAlert(this, rationaleMessage);
            }
        }
    }

注意:shouldShowRequestPermissionsRationale不要在requestPermissions之前调用,否则一直返回false无法使用

相关文章

网友评论

      本文标题:Android 请求权限,以及shouldShowRequest

      本文链接:https://www.haomeiwen.com/subject/jyurpltx.html