2013-05-27 2 views
2

Мое приложение отправляет SMS-сообщения, мне было интересно, есть ли исключения, чтобы поймать, если нет мобильной сети (прием сигнала) и SMS не может быть отправлен?Android есть исключение из-за отсутствия мобильного сигнала?

+1

Хороший вопрос! [Посмотрите здесь] (http://stackoverflow.com/questions/8211081/android-to-check-if-the-phone-has-a-network-provider?lq=1) для «нормального» способа проверка наличия мобильной сети. Когда я просмотрел документацию API для 'telephony.SmsManager', метод' sendTextMessage' будет вызывать только исключение, если есть незаконные аргументы. – ConcurrentHashMap

ответ

0

Не исключено, что AFAIK, но вы можете использовать ConnectivityManger, чтобы получить такую ​​информацию.

Вам также потребуется разрешение ACCESS_NETWORK_STATE.

1

Вы должны понимать, что вызов SmsManager.sendTextMessage() не сразу и синхронно не отправляет сообщение, поэтому это не вызовет исключения из-за невозможности отправки.

Однако, когда вы вызываете sendTextMessage(), вы можете указать PendingIntent, который будет срабатывать при успешном/неудачном отправке сообщения. Вот соответствующая часть документации для этого параметра:

если не нулевой, ArrayList из PendingIntents (один для каждого сообщения части), которая транслируется, когда соответствующая часть сообщения была отправлено. Код результата будет Activity.RESULT_OK для успеха, или один этих ошибок:

RESULT_ERROR_GENERIC_FAILURE

RESULT_ERROR_RADIO_OFF

RESULT_ERROR_NULL_PDU

Для RESULT_ERROR_GENERIC_FAILURE каждый sentIntent может включать в себя дополнительные "ERRORCODE", содержащий конкретное значение радиотехнологии, обычно полезно только для устранения неполадок.

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

Затем, как показано в documentation, вы можете отправить текст следующим образом:

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