0

我正在制作 SMS Manager 应用程序。这是我的代码。

收货人代码:

private val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent) {
        val id = intent.getIntExtra("id", 0)
        if (resultCode == Activity.RESULT_OK) {
            Log.d("SMS", "Success to sent SMS")
        } else {
            Log.e("SMS", "Failed to send SMS")
        }
    }
}

发送短信方法:

private fun sendMessage(phone: String, message: String) {
    try {
        Log.d("SMS", "Send SMS")
        val intent = Intent(SENT)
        val sentIntent = PendingIntent.getBroadcast(activity, 0, intent, PendingIntent.FLAG_ONE_SHOT)
        smsManager.sendTextMessage(phone, null, message, sentIntent, null)
    } catch (ex: Exception) {
        Log.e("Error", "error", ex)
    }
}

当我向正确的号码发送消息时,接收者可以收到“成功”事件。很好!
但是当我向“123123123”等随机数发送消息时,接收方也会收到“成功”事件。很糟糕!
所以我检查了我的手机,但默认消息应用程序中有失败的消息。

所以我的问题是:为什么在我的代码的 sendIntent 中
广播成功 事件?
我该如何解决这个问题?

请任何人帮助我。
谢谢。

PS。 我已经看过以下网址。但仍然没有答案。

即使使用没有送达报告的随机手机号码,短信也始终显示“已发送短信” - android

Android 短信总是发送相同的联系人

如何在模拟器中测试短信发送失败

4

1 回答 1

1

SENT 状态仅反映 SMS 从手机到陆侧 SMSC (Server) 的传输。当您获得成功时,这意味着消息已成功从手机传输到服务器。它与将消息实际传递给收件人没有任何关系。

如果您想了解交付状态,您需要创建一个附加信息PendingIntent并将其传递给SmsManager

    val intent = Intent(SENT)
    val sentIntent = PendingIntent.getBroadcast(activity, 0, intent,
                            PendingIntent.FLAG_ONE_SHOT)
    val intent2 = Intent(DELIVERY)
    PendingIntent.getBroadcast(activity, 0, intent2,
                            PendingIntent.FLAG_ONE_SHOT)
    smsManager.sendTextMessage(phone, null, message, sentIntent, deliveryIntent)

然后,您BroadcastReceiver可以捕获传递Intent并确定消息是否已成功传递。

于 2021-02-12T09:52:58.353 回答