8

当我使用 发送短信时SmsManager,广播的结果意图的值为 5

Activity.RESULT_OK
SmsManager.RESULT_ERROR_GENERIC_FAILURE
SmsManager.RESULT_ERROR_NO_SERVICE
SmsManager.RESULT_ERROR_NULL_PDU
SmsManager.RESULT_ERROR_RADIO_OFF

他们每个人的意思是什么?请提及一个可以生成每个测试用例的测试用例。我知道 RESULT_OK 表示成功发送的短信。GENERIC_FAILURE 出现一般错误(例如我没有信用)。

但是我已经激活了飞行模式并尝试发送短信。我以为它会触发 NO_SERVICE 错误,但触发了 RADIO_OFF。官方文档也没有很好地展示它们。

4

3 回答 3

14

这是我对SmsManager 文档的评论

  • RESULT_ERROR_GENERIC_FAILURE:一般故障原因

    出了点问题,没有办法说出是什么,为什么或如何。

  • RESULT_ERROR_NO_SERVICE:失败,因为服务当前不可用

    您的设备根本无法接收手机信号。你可能在偏僻的地方,在里面的某个地方,地下,或者在太空中。当然远离任何手机信号塔。

  • RESULT_ERROR_NULL_PDU:失败,因为没有提供 pdu

    SMS 堆栈出现问题,同时使用协议描述单元 (PDU)(很可能将其放在一起进行传输)。

  • RESULT_ERROR_RADIO_OFF:失败,因为无线电被明确关闭

    您将设备切换到飞行模式,这会准确地告诉您的设备“关闭所有无线电”(手机、wifi、蓝牙、NFC……)。

最后,大多数应用程序不需要关心为什么发送短信失败(除了询问用户飞行模式是否开启以防万一RESULT_ERROR_RADIO_OFF),因为应用程序本身无法补救。

于 2012-10-20T11:51:35.503 回答
5

应该可以进一步了解 RESULT_ERROR_GENERIC_FAILURE 背后的原因。在接收 SMS 发送结果的接收器中:

@Override
public void onReceive(Context context, Intent intent) {

    // Other code processing other outcomes

    if (getResult() == SmsManager.RESULT_ERROR_GENERIC_FAILURE) {
        int errorCode = intent.getIntExtra("errorCode", -1);
        if (errorCode != -1) {
            // process errorCode ...
            }
        }

    // More code ...
    }

我尚未证明这一点,但此处此处提供的列表提供了可能对errorCode. 这里的首字母缩略词提供了一些关于如何理解这些列表的解释。例如:

号码问题

  • 1 您发送的号码根本没有被任何人使用。
  • 28 您要发送的号码存在,但没有与之关联的电话。目前没有分配给 SIM 卡。
  • 195 您发送的号码无效。
  • 196 您发送的号码被禁止(或被您不清楚)。

其他问题

  • 42 网络太忙
  • 38 网络出现故障(可能有一段时间)

在我看来,代码之间有相当多的重叠,但我不是这些方面的专家。

于 2018-05-28T15:01:40.193 回答
3

SmsManager.RESULT_ERROR_GENERIC_FAILURE

当消息对于 1 条 SMS 而言太长时,通常会出现此错误。在这种情况下使用这个:

ArrayList<String> texts = smsManager.divideMessage(text);
smsManager.sendMultipartTextMessage(phone, null, texts, null, null)
于 2015-06-24T09:17:20.667 回答