使用此代码根本不显示请求权限对话框,为什么?
Requesting Permission dialogue not showing up at all with this code, why?
我试图在运行时单击某个按钮后向用户请求存储权限。但不知何故,无论我尝试什么,这段代码(包含在片段的 class 中)根本不起作用。
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 任务都会使我的应用程序崩溃。
我在网上查了很多,但我还是不明白为什么它不起作用。
至于您检查权限的方式(如果它在片段中)可能不正确,因为这些方法已被弃用,您可以使用推荐的另一种方式
Documentation for how to request permissions|android developers
这样才是正确的方法:
第 1 步 - 您将此代码作为全局代码放入 fragment/activity:
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 步 - 然后,当您需要请求权限时,您在声明为 global 的对象上调用 launch ,它将在 Fragment / Activity 的 OnCreate() 函数中调用。所以如果您想在创建片段 / 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();
}
我试图在运行时单击某个按钮后向用户请求存储权限。但不知何故,无论我尝试什么,这段代码(包含在片段的 class 中)根本不起作用。
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 任务都会使我的应用程序崩溃。
我在网上查了很多,但我还是不明白为什么它不起作用。
至于您检查权限的方式(如果它在片段中)可能不正确,因为这些方法已被弃用,您可以使用推荐的另一种方式
Documentation for how to request permissions|android developers
这样才是正确的方法:
第 1 步 - 您将此代码作为全局代码放入 fragment/activity:
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 步 - 然后,当您需要请求权限时,您在声明为 global 的对象上调用 launch ,它将在 Fragment / Activity 的 OnCreate() 函数中调用。所以如果您想在创建片段 / 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();
}