2

我的应用程序发送 SMS 消息,我想知道如果没有可用的移动网络(信号接收)并且无法发送 SMS,是否有异常要捕获?

4

3 回答 3

2

您可以注册此处理程序来处理结果:

registerReceiver(new BroadcastReceiver() 
    {
        @Override
        public void onReceive(Context context, Intent intent) 
        {
            int resultCode = getResultCode();
            switch (resultCode) 
            {
             case Activity.RESULT_OK:                      
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:       
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:        
                break;
            }
        }
    }, new IntentFilter("SMS_SENT"));

然后,如文档中所示,您可以按如下方式发送文本:

sendTextMessage (number, null, "text", PendingIntent.getBroadcast(this, 0,
    new Intent("SMS_SENT_ACTION"), 0), null);
于 2013-05-27T18:38:08.727 回答
1

您应该明白,调用SmsManager.sendTextMessage()不会立即同步发送消息,因此不会因发送失败而引发异常。

但是,当您打电话时,sendTextMessage()您可以提供一个PendingIntent将在发送消息成功/失败时触发的。这是该参数文档的相关部分:

如果不为 null,则在发送相应消息部分时广播的 PendingIntents 的 ArrayList(每个消息部分一个)。结果代码将是 Activity.RESULT_OK 表示成功,或以下错误之一:

RESULT_ERROR_GENERIC_FAILURE

RESULT_ERROR_RADIO_OFF

RESULT_ERROR_NULL_PDU

对于 RESULT_ERROR_GENERIC_FAILURE,每个 sentIntent 可能包含额外的“errorCode”,其中包含无线电技术特定值,通常仅对故障排除有用。

于 2013-05-27T18:35:55.047 回答
0

AFAIK 也不例外,但您可以使用ConnectivityManger获取此类信息。

您也需要ACCESS_NETWORK_STATE获得许可。

于 2013-05-27T18:31:57.610 回答