android版本sdk动态获取权限问题


如何获取在现有的BaseActivity类添加app内所需要的权限,即是动态获取权限

/**
 * 需要进行检测的权限数组  这里只列举了几项  小伙伴可以根据自己的项目需求 来添加
 */
protected String[] needPermissions = {
        Manifest.permission.ACCESS_COARSE_LOCATION,//定位权限
        Manifest.permission.ACCESS_FINE_LOCATION,//定位权限
        Manifest.permission.WRITE_EXTERNAL_STORAGE,//存储卡写入权限
        Manifest.permission.READ_EXTERNAL_STORAGE,//存储卡读取权限
        Manifest.permission.READ_PHONE_STATE,//读取手机状态权限
        Manifest.permission.CALL_PHONE,//打电话
        Manifest.permission.CAMERA,//打开相机
};

private static final int PERMISSON_REQUESTCODE = 0;

/**
 * 判断是否需要检测,防止不停的弹框
 */
private boolean isNeedCheck = true;

/**
 * 检查权限
 */
private void checkPermissions(String... permissions) {
    List<String> needRequestPermissonList = findDeniedPermissions(permissions);
    if (null != needRequestPermissonList
            && needRequestPermissonList.size() > 0) {
        ActivityCompat.requestPermissions(this,
                needRequestPermissonList.toArray(
                        new String[needRequestPermissonList.size()]),
                PERMISSON_REQUESTCODE);
    }
}

/**
 * 获取权限集中需要申请权限的列表
 *
 * @param permissions
 * @return
 * @since 2.5.0
 */
private List<String> findDeniedPermissions(String[] permissions) {
    List<String> needRequestPermissonList = new ArrayList<String>();
    for (String perm : permissions) {
        if (ContextCompat.checkSelfPermission(this,
                perm) != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.shouldShowRequestPermissionRationale(
                this, perm)) {
            needRequestPermissonList.add(perm);
        }
    }
    return needRequestPermissonList;
}

/**
 * 检测是否有的权限都已经授权
 *
 * @param grantResults
 */
private boolean verifyPermissions(int[] grantResults) {
    for (int result : grantResults) {
        if (result != PackageManager.PERMISSION_GRANTED) {
            return false;
        }
    }
    return true;
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String[] permissions, int[] paramArrayOfInt) {
    if (requestCode == PERMISSON_REQUESTCODE) {
        if (!verifyPermissions(paramArrayOfInt)) {
            showMissingPermissionDialog();
            isNeedCheck = false;
        }
    }
}


/**
 * 弹出对话框, 提示用户手动授权
 */
private void showMissingPermissionDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(R.string.notifyTitle);
    builder.setMessage(R.string.notifyMsg);

    // 拒绝授权  退出应用
    builder.setNegativeButton(R.string.cancel,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
    //同意授权
    builder.setPositiveButton(R.string.setting,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    startAppSettings();
                }
            });

    builder.setCancelable(false);
    builder.show();

}


xml文件中

<string name="notifyTitle">提示</string>
<string name="notifyMsg">当前应用缺少必要权限。\n\n请点击\"设置\"-\"权限\"-打开所需权限。</string>
<string name="setting">设置</string>
<string name="cancel">取消</string>


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值