为了账号安全,请及时绑定邮箱和手机立即绑定

无法一次请求多个危险权限

无法一次请求多个危险权限

猛跑小猪 2023-06-04 19:44:59
我正在开发一个收集数据进行处理的应用程序,因此它需要多个危险权限(即ACCESS_FINE_LOCATION和READ_PHONE_STATE)。目前它请求一个然后崩溃。我尝试使用 分别请求权限ActivityCompat.requestPermissions,并且尝试在数组中拥有这两种权限。我也尝试过使用请求代码 0,1 和 7,因为我看到这些用于对有关此主题的类似问题的不同回答,但似乎没有任何改变。 private void setupPermissions() {        ArrayList<String> permissions = new ArrayList<>();        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {            permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);        }        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {            permissions.add(Manifest.permission.READ_PHONE_STATE);        }        if (permissions.size()>0){            ActivityCompat.requestPermissions(getActivity(), permissions.toArray(new String[permissions.size()]), 7);        }    }预期成绩:首次打开应用程序时,应通过两个单独的对话框(一个接一个)或多页对话框请求两个权限。该应用程序应按预期运行实际结果:要求第一个允许您继续使用该应用程序当您尝试使用需要第二个的功能时崩溃重新打开应用程序要求第二个允许应用程序正常运行
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

每当您需要权限时调用此 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;

}


查看完整回答
反对 回复 2023-06-04
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

试试下面的代码 

public static boolean hasPermissions(Context context, String... permissions) {

    if (context != null && permissions != null) {

        for (String permission : permissions) {

            if (ActivityCompat.checkSelfPermission(context, permission) != 

                PackageManager.PERMISSION_GRANTED) {

                return false;

            }

        }

    }

    return true;


}

int PERMISSION_ALL = 1; 

String[] PERMISSIONS = {

  android.Manifest.permission.ACCESS_FINE_LOCATION, 

  android.Manifest.permission.READ_PHONESTATE

};


if(!hasPermissions(this, PERMISSIONS)){

    ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);

}


查看完整回答
反对 回复 2023-06-04
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信