Android判断某个权限是否开启

/** 常用权限(可能不全)  **/
// SMS(短信)//    SEND_SMS
//    RECEIVE_SMS
//    READ_SMS
//    RECEIVE_WAP_PUSH
//    RECEIVE_MMS

//    STORAGE(存储卡-读写权限)
//    READ_EXTERNAL_STORAGE
//    WRITE_EXTERNAL_STORAGE

//    CONTACTS(联系人)
//    READ_CONTACTS
//    WRITE_CONTACTS
//    GET_ACCOUNTS

//    PHONE(手机)
//    READ_PHONE_STATE
//    CALL_PHONE
//    READ_CALL_LOG
//    WRITE_CALL_LOG
//    ADD_VOICEMAIL
//    USE_SIP
//    PROCESS_OUTGOING_CALLS

//    CALENDAR(日历)
//    READ_CALENDAR
//    WRITE_CALENDAR

//    CAMERA(相机)
//    CAMERA

//    LOCATION(位置)
//    ACCESS_FINE_LOCATION
//    ACCESS_COARSE_LOCATION

//    SENSORS(传感器)
//    BODY_SENSORS

//    MICROPHONE(麦克风)
//    RECORD_AUDIO



import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;

import com.shawyo.gzh.wisdompark.MyApplication;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

/**
 * created by Administrator
 * on 2020/4/16 0016
 * Describe:gzh  可自己添加自己需要的权限
 */
public class PermissionsUtils {
    public static final int REQUEST_CODE = 1111;
    /**
     * 录音需要的权限
     */
    public static String[]permissionsRecord={
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    /**
     *  读写权限
     */
    public static String[]permissionsREAD={
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
    };

    /**
     *  读写权限+相机权限
     */
    public static String[]permissionsREADAndCamera={
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.CAMERA
    };

    /**
     *  定位权限
     */
    public static String[]permissionsPositioning={
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION
    };

    /**
     *  拨打电话权限
     */
    public static String[]permissionsCallPhone={
            Manifest.permission.CALL_PHONE,
    };

    private String[]mPermissions;

    private static Activity mActivity;

    public PermissionsUtils(Activity activity) {
        mActivity = activity;
    }

    public static PermissionsUtils from(Activity activity){
        return new PermissionsUtils(activity);
    }

    public boolean setPermissions(String[] permissions) {
        this.mPermissions = permissions;
        return lacksPermissions();
    }

    /**
     * 判断权限集合
     * permissions 权限数组
     * return true-表示权限已开启  false-表示没有改权限
     */
    public boolean lacksPermissions() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            for (String permission : mPermissions) {
                if (lacksPermission(permission)) {
                    ActivityCompat.requestPermissions(mActivity, mPermissions, REQUEST_CODE);
                    forResult();
                    return false;
                }
            }
            return true;
        }else {
            return true;
        }
    }

    /**
     * 判断是否缺少权限
     */
    private boolean lacksPermission(String permission) {
        return ContextCompat.checkSelfPermission(mActivity, permission) ==
                PackageManager.PERMISSION_DENIED;
    }

    public void forResult(){
        ActivityCompat.requestPermissions(mActivity,mPermissions,REQUEST_CODE);
    }

    /**
     * 回调
     * @param requestCode
     * @param permissions
     * @param grantResults
     * @param isStart 是否跳转开启权限界面  true跳转  false 不跳转
     * @return
     */
    public static boolean onPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults,boolean isStart) {
        boolean bool = true;
        if (requestCode == PermissionsUtils.REQUEST_CODE){
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == -1){
                    bool = false;
                    //这里就写了几个权限的判断,可根据自己实际需求进行代码编写 T 我封装的Toast类
                    if (TextUtils.equals(permissions[i],Manifest.permission.READ_EXTERNAL_STORAGE)
                            || TextUtils.equals(permissions[i],Manifest.permission.WRITE_EXTERNAL_STORAGE)){
                        T.showShort(mActivity,"请开启手机读写权限");
                    }else if ( TextUtils.equals(permissions[i],Manifest.permission.CAMERA)){
                        T.showShort(MyApplication.getContextObject(),"请开启手机相机权限");
                    }else if ( TextUtils.equals(permissions[i],Manifest.permission.ACCESS_COARSE_LOCATION)
                            ||  TextUtils.equals(permissions[i],Manifest.permission.ACCESS_FINE_LOCATION)){
                        T.showShort(MyApplication.getContextObject(),"请开启手机定位权限");
                    }else if ( TextUtils.equals(permissions[i],Manifest.permission.CALL_PHONE)){
                        T.showShort(MyApplication.getContextObject(),"请开启手机拨号权限");
                    }
                   
                    if (isStart){
                      //跳转到系统开启权限界面
                        start();
                    }
                    break;
                }
            }
            if (grantResults.length>0 && bool){
                bool = true;
            }else {
                bool = false;
            }
        }else {
            bool = false;
        }
        return bool;
    }

    //跳转
    private static void start(){
        Intent intent = new Intent();
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setData(Uri.parse("package:" + mActivity.getPackageName()));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        mActivity.startActivity(intent);
    }
}

//Activity使用 我这里用了手机读写权限和相机权限,可根据自己的需求添加不同权限

if (PermissionsUtils.from(this).setPermissions(PermissionsUtils.permissionsREADAndCamera)){
    //权限开启,进行下一步操作
}
//回调

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
   
   if (PermissionsUtils.onPermissionsResult(requestCode,permissions,grantResults,true)){
       //进行权限已开启后的操作-跟上面的“下一步”操作一样
   }
}

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值