【发布时间】:2021-03-26 05:09:07
【问题描述】:
我有发送短信按钮,应用程序要求用户提供SEND_SMS 权限,然后发送短信。但是当我点击发送短信按钮应用程序被发送到后台和权限请求对话框显示在主屏幕上。当我单击允许并返回应用程序时,我已自动导航到应用程序的主页片段。无论如何,如果我返回带有发送 SMS 按钮的片段,我就不能发送 SMS。 (所以权限授予是持久的。)我的代码如下所示
在AndroidManifest.xml我有
<uses-permission android:name="android.permission.SEND_SMS" />
在 MainActivity.kt 中
fun requestSendSmsPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.SEND_SMS
)
) {
android.app.AlertDialog.Builder(this)
.setTitle("Permission Request")
.setMessage("Reason for permission request")
.setPositiveButton("ok"
) { _, _ ->
ActivityCompat.requestPermissions(
this@MainActivity,
arrayOf(Manifest.permission.SEND_SMS),
SEND_SMS_PERMISSION_CODE
)
sendSMS()
}
.setNegativeButton("cancel"
) { dialog, _ -> dialog.dismiss() }
.create().show()
} else {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.SEND_SMS),
SEND_SMS_PERMISSION_CODE
)
sendSMS()
}
}
private fun sendSMS(){
val emergencyContactNo = "1234567890"
val messageBody =
"hello there"
val smsManager: SmsManager = SmsManager.getDefault()
smsManager.sendTextMessage(emergencyContactNo, null, messageBody, null, null)
Toast.makeText(this, "Message Sent", Toast.LENGTH_LONG).show()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String?>,
grantResults: IntArray
) {
if (requestCode == SEND_SMS_PERMISSION_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission GRANTED", Toast.LENGTH_SHORT).show()
sendSMS()
} else {
Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show()
}
}
}
在我的短信发送片段中
mainActivity = activity as MainActivity
binding.btnSms.setOnClickListener {
mainActivity.requestSendSmsPermission()
}
我尝试了什么?
- 我尝试在那里的新项目中使用相同的代码它工作正常。但在 我的项目我正在使用导航架构组件。
在我看来,问题在于导航组件和权限对话框组合。那么导航组件如何使用运行时权限呢?
【问题讨论】:
-
onPause()和onStop()中是否有任何可能导致此行为的代码? -
@ADM 感谢您与我们联系。没有这样的代码。
-
这可能是因为应用程序崩溃了。我看到您在请求您不应该获得的许可后致电
sendSMS()。只有在您获得许可后,您才应该致电sendSMS()。删除所有这些对sendSMS()的调用,它应该可以正常工作 -
@ADM 感谢它的工作。你介意写一个答案,所以我可以接受。
标签: android android-permissions