api23及以上应用请求权限的解决方案

来源:互联网 发布:node path resolve 编辑:程序博客网 时间:2024/04/20 03:11
private void populateAutoComplete() {    if (!mayRequestContacts()) {        return;    }    // TODO: 2016/10/8  已获得权限时,需要完成以下任务}
/** * 检查并请求权限 * @return true 为已获取到该权限,false为未获得权限 */private boolean mayRequestContacts() {    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {//如果版本小于23则不用进行请求        return true;    }    //检查是否获得权限    if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {//如果应用已获取权限,checkSelfPermission则返回PERMISSION_GRANTED        return true;    }    //调用该方法,返回true则需要给用户一个选择,用户可以取消授权    if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {        Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)                .setAction(android.R.string.ok, new View.OnClickListener() {                    @Override                    @TargetApi(Build.VERSION_CODES.M)                    public void onClick(View v) {                        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);                    }                });    } else {        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);    }    return false;}
/** * 请求权限的回调接口 */@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,                                       @NonNull int[] grantResults) {    if (requestCode == REQUEST_READ_CONTACTS) {        if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//用户允许获得该权限            populateAutoComplete();        } else {//用户不允许获得该权限        }    }}

0 0
原创粉丝点击