android权限管理

权限管理

public class BaseActivity extends AppCompatActivity {
    //申明所需权限,将所需申请权限放于此处
    private String[] mStrPermissions={
            Manifest.permission.READ_PHONE_STATE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };
    //保存没有同意得权限
    private List<String> mPerList=new ArrayList<>();
    //保存没有同意的失败权限
    private List<String> mPerNoList=new ArrayList<>();

    private int requestcode;

    private OnPermissionsResult permissionsResult;

    /**
     * 一个方法请求权限
     * @param requestCode
     * @param permissionsResult
     */
    protected void request(int requestCode,OnPermissionsResult permissionsResult){
        if (!checkPermissionsAll()){
            requestPermissionAll(requestCode, permissionsResult);//请求所以权限
        }
    }
    /**
     * 判断单个权限
     * @param permissions
     * @return
     */
    protected boolean checkPermissions(String permissions){
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            int check=checkSelfPermission(permissions);
            return check==PackageManager.PERMISSION_GRANTED;
        }
        return false;
    }

    /**
     * 判断是否需要申请权限
     * @return
     */
    protected boolean checkPermissionsAll(){
        mPerList.clear();
        for (int i = 0; i < mStrPermissions.length; i++) {
            boolean check=checkPermissions(mStrPermissions[i]);
            //如果不同意则请求
            if (!check){
                mPerList.add(mStrPermissions[i]);
            }
        }
        return mPerList.size()>0?false:true;
    }
    /**
     * 请求权限
     * @param mPermissios
     * @param requestCode
     */
    protected void requestPermission(String[] mPermissios,int requestCode){
        this.requestcode=requestCode;
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            requestPermissions(mPermissios, requestCode);
        }
    }

    /**
     * 申请所有权限
     * @param requestCode
     */
    protected void requestPermissionAll(int requestCode,OnPermissionsResult permissionsResult){
        this.permissionsResult=permissionsResult;
        requestPermission((String[]) mPerList.toArray(new String[mPerList.size()]),requestCode);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull @NotNull String[] permissions, @NonNull @NotNull int[] grantResults) {
        mPerNoList.clear();
        if (requestCode==requestcode){
            if (grantResults.length>0){
                for (int i = 0; i < grantResults.length; i++) {
                    if (grantResults[i]==PackageManager.PERMISSION_DENIED){
                        //你有失败的权限
                        mPerNoList.add(permissions[i]);
                    }
                }
                if (permissionsResult!=null){
                    if (mPerNoList.size()==0){
                        permissionsResult.OnSuccess();
                    }else{
                        permissionsResult.OnFail(mPerNoList);
                    }
                }
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    protected interface OnPermissionsResult{
        void OnSuccess();
        void OnFail(List<String> noPermissions);
    }
    //检查窗口权限(悬浮框)
    protected boolean checkWindowPermissions(){
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            return Settings.canDrawOverlays(this);
        }
        return true;
    }

    /**
     * 请求窗口权限(悬浮框)
     * @param requestCode
     */
    protected void requestWindwoPermissions(int requestCode){
        Intent intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:"+getPackageName()));
        startActivityForResult(intent,requestCode);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值