请求权限对话框不显示与此代码,为什么?



我试图在运行时单击某个按钮后请求用户的存储权限。但不知何故,这段代码(这是包含在一个片段的类)是不工作,无论我尝试。

binding.button.setOnClickListener {
requestPermissions(this.requireActivity(), "android.permission.WRITE_EXTERNAL_STORAGE", 392)
}

这段代码对于写和读权限都不起作用:

binding.button.setOnClickListener {
ActivityCompat.requestPermissions(this.requireActivity(), "android.permission.WRITE_EXTERNAL_STORAGE", 392)
}

无论如何都不出现对话。

注意:我在运行API 29的物理设备上进行测试。注2:我向清单添加了WRITE和READ权限。注3:执行任何IO任务会使我的应用程序崩溃。

我在网上查了一下,但我还是不明白为什么它不工作。

至于你检查权限的方式,如果它是在一个片段可能是不正确的,因为这些方法被弃用,你可以使用另一种方式,这是推荐的一个

如何请求权限的文档|android开发者

是正确的方式,就像这样:

步骤1 -你把这段代码作为全局的片段/活动:

private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) doSomething()
else
Toast.makeText(getContext(), "Can't continue without the required permissions", Toast.LENGTH_LONG).show();
});

步骤2-然后,当你需要请求一个权限时,你调用launch对你声明为全局的对象,这是在Fragment/Activity的OnCreate()函数中调用。所以,如果你想在Fragment/Activity的创建时请求这些权限,那么只需将此代码放在OnCreate()中,或者如果使用按钮来检查权限,那么在OnCreate()函数中设置onClickListener:

public void getNecessaryPermissionsAnddoSomething() {
if (ActivityCompat.checkSelfPermission(getContext(),
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
} else doSomething();
}

最新更新