我正在开发一个收集数据以进行处理的应用程序,因此它需要多个危险权限(即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);
}
}
预期结果:
- 第一次打开应用程序时,应请求两个权限,可以通过两个单独的对话框(一个接一个)或多页对话框来实现。
- 然后应按预期运行应用程序。
实际结果:
- 请求第一个权限。
- 允许您继续使用应用程序。
- 当您尝试使用需要第二个权限的功能时,应用程序崩溃。
- 重新打开应用程序。
- 请求第二个权限。
- 允许应用程序像往常一样继续运行。
onRequestPermissionsResult()
代码 - Zeeshan Shabbir