Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t处理片段中权限对话框中的单击按钮允许_Android_Android Studio_Android Permissions - Fatal编程技术网

Android Can';t处理片段中权限对话框中的单击按钮允许

Android Can';t处理片段中权限对话框中的单击按钮允许,android,android-studio,android-permissions,Android,Android Studio,Android Permissions,安卓工作室3.4 下面是我如何在片段中显示权限对话框: private boolean checkAndRequestPermissions() { int internet = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.INTERNET); int loc = ContextCompat.checkSelfPermission(getActivity(), Manifest.perm

安卓工作室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;
}
private boolean checkAndRequestPermissions(){
int internet=ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.internet);
int loc=ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS\u位置);
int loc2=ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS\u FINE\u LOCATION);
List ListPermissionsNeed=new ArrayList();
如果(internet!=已授予PackageManager.PERMISSION){
listPermissionsNeed.add(Manifest.permission.INTERNET);
}
如果(loc!=已授予包装管理员权限){
listPermissionsNeed.add(Manifest.permission.ACCESS\u位置);
}
如果(loc2!=已授予PackageManager.权限){
listPermissionsNeed.add(Manifest.permission.ACCESS\u FINE\u位置);
}
if(BuildConfig.DEBUG)
Log.d(标记为“checkAndRequestPermissions_ListPermissionsNeed”(+ListPermissionsNeed.size()+));
如果(!ListPermissionsNeed.isEmpty()){
ActivityCompat.requestPermissions(getActivity(),ListPermissionsNeed.toArray(新字符串[ListPermissionsNeed.size()]),1);
返回false;
}
返回true;
}
结果如下:

很好。
但是我需要处理单击按钮允许执行一些特定操作。

您必须覆盖请求许可结果的
,如下所示:

@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;
        }
    }
}

据我所知,没有办法设置一个侦听器,但你可以在事后检查它,就像你以前检查它一样

if (internet == PackageManager.PERMISSION_GRANTED) {
    //internet allowed
}
if (loc == PackageManager.PERMISSION_GRANTED) {
    //loc allowed
}
if (loc2 == PackageManager.PERMISSION_GRANTED) {
    //loc2 allowed
}

这应该可以解决您的问题。

不调用方法onRequestPermissionsResult()