首页 > 解决方案 > 无法在片段的权限对话框中处理单击按钮允许

问题描述

安卓工作室 3.4。

这里我如何在片段中显示权限对话框:

private boolean checkAndRequestPermissions() {
    int internet = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.INTERNET);
    int loc = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION);
    int loc2 = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
    List<String> listPermissionsNeeded = new ArrayList<>();
    if (internet != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.INTERNET);
    }
    if (loc != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION);
    }
    if (loc2 != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }
    if (BuildConfig.DEBUG)
        Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 1);
        return false;
    }
    return true;
}

这里的结果:

在此处输入图像描述

好的。但是我需要处理点击按钮允许做一些特定的操作。

标签: androidandroid-studioandroid-permissions

解决方案


onRequestPermissionsResult您必须像这样覆盖:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 1: {
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // user pressed ALLOW

            } else {
                // user pressed DENY
            }
            return;
        }
    }
}

推荐阅读