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;
}
pasteonRequestPermissionsResult()
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;
}