0

我有一个 BroadcastReceiver 来处理这个android.provider.Telephony.SMS_RECEIVED动作,并在某些情况下发送一条短信作为回复。我的应用程序具有android.permission.SEND_SMS,并且在 GSM 手机上运行良好。但是,它不适用于我目前唯一可用的 CDMA 手机,我怀疑它只出现在 CDMA 手机上。它适用于我尝试过的所有 GSM 手机,其中不少。logcat不显示错误或警告,仅D/SMSSMSSMSSMS( 260): TeleService: 4098每次sendSms调用。此外,我在一个 Activity 中尝试了完全相同的代码,它工作得非常好。

我正在使用的代码:

private void sendSms(String destination, String message) {
    if(preferencesManager.smsRepliesEnabled()) {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(destination, null, message, null, null);
    }
}

preferencesManager.smsRepliesEnabled()按预期工作,并且destination设置message正确。我添加了一个Log.d声明来确认所有这三个。同样,PhoneNumberUtils.isWellFormedSmsAddress(destination)返回true.

编辑:根据@wojci 的建议,我添加了一个sentIntent并记录了结果代码。结果代码为RESULT_ERROR_GENERIC_FAILURE,额外errorCode设置为-1。但是,当我从 Activity 尝试完全相同的代码时,它可以正常工作RESULT_OK

4

1 回答 1

1

您写道,您使用以下内容发送文本: smsManager.sendTextMessage(destination, null, message, null, null);

为什么你不使用sentIntent参数,它可以告诉你你的消息是否被网络接受?

从文档中:

sentIntent  if not NULL this PendingIntent is broadcast when the message is successfully sent, or failed. The result code will be Activity.RESULT_OK for success, or one of these errors:
RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_RADIO_OFF
RESULT_ERROR_NULL_PDU

也许它可以为您提供更多线索,说明为什么您的 SMS 发送无法按预期工作。

于 2012-07-31T12:11:14.523 回答