Android6.0以上权限相关Util

来源:互联网 发布:学directx编程要多久 编辑:程序博客网 时间:2024/05/17 21:53

Android6.0以上并不能直接创建文件或者文件夹,需要手动申请相关权限(拨打电话等都需要)


import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager;import android.os.Build;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;/** * 6.0+权限工具类 * Created by Jing on 2017/3/10. */public class PermissionsUtil {    public static final int REQUEST_WRITE_EXTERNAL_STORAGE = 300; //写入外部存储    public static final int REQUEST_MOUNT_UNMOUNT_FILESYSTEMS = 301; //挂载文件系统    public static final int REQUEST_ACCESS_NETWORK_STATE = 302;    public static final int REQUEST_ACCESS_WIFI_STATE = 303;    public static final int REQUEST_READ_PHONE_STATE = 304; //读取电话状态    /**     * 判断是否有权限     * PackageManager.PERMISSION_GRANTED 授予权限     * PackageManager.PERMISSION_DENIED 缺少权限     */    public boolean checkPermissions(Context context, String permission) {        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;    }    /**     * 6.0+申请权限,必须传入activity     *     * @param activity     * @param permission     * @param requestCode     * @param listener     */    public void requestPermissions(Activity activity, String permission, int requestCode, OnPermissionGrantedListener listener) {        if (Build.VERSION.SDK_INT >= 23) {            int checkCallPhonePermission = ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission);            if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {                ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);            } else {                //权限已有,直接调用                if (listener != null)                    listener.OnPermission();            }        } else {            //6.0以下直接调用            if (listener != null)                listener.OnPermission();        }    }    /**     * 单纯申请权限     *     * @param activity     * @param permission     * @param requestCode     */    public void requestPermissions(Activity activity, String permission, int requestCode) {        if (Build.VERSION.SDK_INT >= 23) {            int checkCallPhonePermission = ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission);            if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {                ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);            }        }    }    public interface OnPermissionGrantedListener {        void OnPermission();    }}

申请权限必须要在Activity中申请,并在其中重写onRequestPermissionsResult方法


//申请文件写入权限,创建文件夹new PermissionsUtil().requestPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE,                PermissionsUtil.REQUEST_WRITE_EXTERNAL_STORAGE, new PermissionsUtil.OnPermissionGrantedListener() {                    @Override                    public void OnPermission() {                        //createFile();                    }                });

Activity中重写权限反馈方法

@Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        switch (requestCode) {            case PermissionsUtil.REQUEST_WRITE_EXTERNAL_STORAGE:                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                    //createFile();                } else {                    //CommonUtil.showToast(this, "文件写入权限被拒绝,无法使用头像上传等功能");                }                break;            default:                super.onRequestPermissionsResult(requestCode, permissions, grantResults);        }    }



目前的权限分组,组中一个权限被申请后,其余权限也都有了。






0 0
原创粉丝点击