我有一个方法,以便在需要时显示请求权限。
static boolean requestPermission(int id, String... permissions) {
System.out.println("REQUEST PERMISSION METHOD");
boolean granted = true;
ArrayList<String> list = new ArrayList<>();
for (String s : permissions) {
int check = ContextCompat.checkSelfPermission(this, s);
boolean hasPermission = (check == PackageManager.PERMISSION_GRANTED);
granted &= hasPermission;
if (!hasPermission) {
list.add(s);
}
}
if (granted) {
return true;
} else {
ActivityCompat.requestPermissions(this, permissionsNeeded.toArray(new String[permissionsNeeded.size()]), id);
return false;
}
}这个方法直到Android 13才开始工作,我正在使用Android中最新的官方Android仿真器进行测试,现在如果我调用了onResume()。
requestPermission(id,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE));我有一个不确定请求的循环:我没有任何崩溃,但是在日志cat中,我继续"REQUEST PERMISSION METHOD"打印,将字符串打印放在方法的开头,就好像方法被持续地调用一样。
为什么要这样?我该如何解决这个问题?
发布于 2022-06-19 22:03:40
造成这个问题的原因是,如果针对较新的安卓版本,您尝试获取的Manifest.permission.*常量不再有效。这会给您的
ActivityCompat.requestPermissions(...)因此,用适当的API级别检查或针对一个较低的android版本来包装请求,直到应用程序正确迁移到SAF (因此您不需要直接存储访问和相关权限)。
https://stackoverflow.com/questions/72678848
复制相似问题