Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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
Java 无法同时请求多个危险权限_Java_Android_Android Fragments_Android Permissions - Fatal编程技术网

Java 无法同时请求多个危险权限

Java 无法同时请求多个危险权限,java,android,android-fragments,android-permissions,Java,Android,Android Fragments,Android Permissions,我正在开发一个收集数据以进行处理的应用程序,因此它需要多个危险权限(即访问\u FINE\u LOCATION和读取\u PHONE\u STATE)。此时它请求一个,然后崩溃 我已尝试使用ActivityCompat.requestPermissions分别请求权限,并尝试在数组中同时拥有这两个权限。我也尝试过使用请求代码0、1和7,因为我在这个主题的类似问题的不同答案中看到了这些代码,但似乎没有任何变化 private void setupPermissions(){ ArrayList权限

我正在开发一个收集数据以进行处理的应用程序,因此它需要多个危险权限(即
访问\u FINE\u LOCATION
读取\u PHONE\u STATE
)。此时它请求一个,然后崩溃

我已尝试使用
ActivityCompat.requestPermissions
分别请求权限,并尝试在数组中同时拥有这两个权限。我也尝试过使用请求代码0、1和7,因为我在这个主题的类似问题的不同答案中看到了这些代码,但似乎没有任何变化

private void setupPermissions(){
ArrayList权限=新建ArrayList();
if(ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
权限.add(Manifest.permission.ACCESS\u FINE\u位置);
}
if(ActivityCompat.checkSelfPermission(getActivity(),Manifest.permission.READ\u PHONE\u STATE)!=PackageManager.permission\u已授予){
权限.add(Manifest.permission.READ\u PHONE\u STATE);
}
if(permissions.size()>0){
ActivityCompat.requestPermissions(getActivity(),permissions.toArray(新字符串[permissions.size()]),7);
}
}
预期成果:

  • 首次打开应用程序时,应通过两个单独的对话框(一个接一个)或多页对话框请求两个权限
  • 然后应用程序应按预期运行
实际结果:

  • 请求第一个
  • 允许您继续使用应用程序
  • 当您尝试使用需要第二个选项的功能时崩溃
  • 重新打开应用程序
  • 第二个请求
  • 允许应用程序正常运行
尝试以下代码


如果需要权限,请调用此checkAndRequestPermissions()方法

private boolean checkAndRequestPermissions() {

    int ACCESS_FINE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
    int READ_PHONE_STATE = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);

    List<String> listPermissionsNeeded = new ArrayList<>();

    if (READ_PHONE_STATE != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
    }
    if (ACCESS_FINE_LOCATION != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }

    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]), 101);
        return false;
    }
    return true;
}
private boolean checkAndRequestPermissions(){
int ACCESS\u FINE\u LOCATION=ContextCompat.checkSelfPermission(这是Manifest.permission.ACCESS\u FINE\u LOCATION);
int READ\u PHONE\u STATE=ContextCompat.checkSelfPermission(这是Manifest.permission.READ\u PHONE\u STATE);
List ListPermissionsNeed=new ArrayList();
if(读取\电话\状态!=已授予PackageManager.权限){
listPermissionsNeed.add(Manifest.permission.READ\u PHONE\u STATE);
}
if(访问\u精细\u位置!=已授予PackageManager.权限){
listPermissionsNeed.add(Manifest.permission.ACCESS\u FINE\u位置);
}
如果(!ListPermissionsNeed.isEmpty()){
ActivityCompat.requestPermissions(此,ListPermissionsNeed.toArray
(新字符串[ListPermissionsNeed.size()]),101);
返回false;
}
返回true;
}

paste
onRequestPermissionsResult()
code此处您的目标sdk版本是什么?
private boolean checkAndRequestPermissions() {

    int ACCESS_FINE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
    int READ_PHONE_STATE = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);

    List<String> listPermissionsNeeded = new ArrayList<>();

    if (READ_PHONE_STATE != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
    }
    if (ACCESS_FINE_LOCATION != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }

    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]), 101);
        return false;
    }
    return true;
}