AlertDialogBox 显示即使从未调用 kotlin android
AlertDialogBox showing even though never called kotlin android
我正在制作一个 android 应用程序,并请求读取存储空间的权限。
这是请求权限的代码:
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
(它说 "Don't ask again" 因为我试过很多次了)
好像是运行requestPermissions(this, arrayOf(READ_EXTERNAL_STORAGE), requestCode)
,没等用户select允许或拒绝,就显示了对话框。
为什么会这样?感谢任何帮助,因为我是 kotlin
的新手
之所以马上出现Dialog
是因为你申请权限后正在检查是否创建
第二个 if (!checkPermission())
没有区别,因为权限更改不会立即发生。您可以尝试以下步骤:
- 删除代码以使您的
Dialog
成为 setUpPermissions()
。
复制并粘贴以下代码:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
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")
}
}
这应该做的是在 requestPermission()
的结果发生后,它应该检查权限。然后,如果没有被授予,它将使 Dialog
.
让我知道这是否有效,或者如果您 运行 遇到任何错误,因为我没有亲自测试它。
我正在制作一个 android 应用程序,并请求读取存储空间的权限。
这是请求权限的代码:
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 (它说 "Don't ask again" 因为我试过很多次了)
好像是运行requestPermissions(this, arrayOf(READ_EXTERNAL_STORAGE), requestCode)
,没等用户select允许或拒绝,就显示了对话框。
为什么会这样?感谢任何帮助,因为我是 kotlin
的新手之所以马上出现Dialog
是因为你申请权限后正在检查是否创建
第二个 if (!checkPermission())
没有区别,因为权限更改不会立即发生。您可以尝试以下步骤:
- 删除代码以使您的
Dialog
成为setUpPermissions()
。 复制并粘贴以下代码:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); 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") } }
这应该做的是在 requestPermission()
的结果发生后,它应该检查权限。然后,如果没有被授予,它将使 Dialog
.
让我知道这是否有效,或者如果您 运行 遇到任何错误,因为我没有亲自测试它。