【问题标题】:Android is there an exception for no mobile signal?Android有没有手机信号的例外?
【发布时间】:2013-05-22 15:09:35
【问题描述】:

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

【问题讨论】:

  • 好问题! Have a look here 用于检查移动网络是否可用的“正常”方式。当我查看telephony.SmsManager 的 API 文档时,sendTextMessage 方法只会在存在非法参数时抛出异常。

标签: android network-protocols


【解决方案1】:

你可以注册这个处理程序来处理结果:

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"));

然后,如documentation所示,可以发送如下文字:

sendTextMessage (number, null, "text", PendingIntent.getBroadcast(this, 0,
    new Intent("SMS_SENT_ACTION"), 0), null);

【讨论】:

    【解决方案2】:

    你应该明白,调用SmsManager.sendTextMessage()不会立即同步发送消息,所以不会因为发送失败而抛出异常。

    但是,当您调用sendTextMessage() 时,您可以提供PendingIntent,该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”包含无线电技术特定的值,通常 仅对故障排除有用。

    【讨论】:

      【解决方案3】:

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

      您还需要ACCESS_NETWORK_STATE 权限。

      【讨论】:

        猜你喜欢
        • 2012-04-16
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 2011-10-03
        • 2018-03-15
        • 2020-04-27
        相关资源
        最近更新 更多