【发布时间】:2019-07-18 05:57:17
【问题描述】:
我正在制作一个安卓应用,并请求读取存储的权限。
这里是请求权限的代码:
private fun checkPermission():Boolean {
return checkSelfPermission(this, READ_EXTERNAL_STORAGE) == PERMISSION_GRANTED
}
private fun toast(text: String){
Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).show()
}
private fun setupPermissions() {
if (!checkPermission()) {
var requestCode = 7
requestPermissions(this, arrayOf(READ_EXTERNAL_STORAGE), requestCode)
if (!checkPermission()) {
toast("Permissions not granted")
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("Permissions were denied.")
builder.setMessage("You must allow MyApp access to your files to continue.\n\nNote: If you clicked \"Don't ask again,\" you'll have to enable the permission in settings")
builder.setPositiveButton("OK") { dialog, which ->
setupPermissions()
}
builder.setNeutralButton("EXIT") { _, _ ->
Toast.makeText(applicationContext, "You cancelled the dialog.", Toast.LENGTH_SHORT).show()
}
val dialog: AlertDialog = builder.create()
dialog.show()
}
else{
toast("Permissions granted")
}
}
}
问题是它请求权限,但你可以看到它下面的 AlertDialog 框,即使它不应该被调用:
Screenshot of app when it launches (上面写着“不要再问了”,因为我已经试过很多次了)
它似乎正在运行requestPermissions(this, arrayOf(READ_EXTERNAL_STORAGE), requestCode),并且无需等待用户选择允许或拒绝,它就会显示对话框。
为什么会这样?感谢任何帮助,因为我是 kotlin 的新手
【问题讨论】:
-
那么您希望
Dialog何时出现? -
如果权限请求被拒绝,我希望它出现。
-
因此,如果他们没有给予许可,您不希望它立即出现。您希望出现“权限”框。然后,如果他们在“权限”框中单击“拒绝”,您将创建
Dialog?对吗? -
是的,这正是我想要的。
-
好的,你需要做的是取出你的代码来创建
Dialog,并在用户点击DENY时运行该代码。为此,您必须在向他们展示权限框后检测他们是否已接受或授予权限。
标签: android kotlin android-permissions android-alertdialog