[英]SmsManager.sendTextMessage from a BroadcastReceiver does nothing on CDMA phones
我有一个BroadcastReceiver,它处理android.provider.Telephony.SMS_RECEIVED
操作,并在某些情况下发送文本消息作为答复。 我的应用程序具有android.permission.SEND_SMS
,并且在GSM手机上可以正常工作。 但是,它不适用于我目前仅有的唯一CDMA手机,我怀疑它仅出现在CDMA手机上。 它可以在我尝试过的所有GSM手机上运行,其中有很多。 logcat
既不显示错误也不显示警告,仅显示D/SMSSMSSMSSMS( 260): TeleService: 4098
每次调用sendSms
为D/SMSSMSSMSSMS( 260): TeleService: 4098
。 此外,我已经在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
一起RESULT_OK
。
您写道,您使用以下命令发送文本:smsManager.sendTextMessage(destination,null,message,null,null);
为什么不使用sendIntent参数,该参数可以告诉您消息是否被网络接受?
从文档中:
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发送为何无法按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.