Мое приложение отправляет SMS-сообщения, мне было интересно, есть ли исключения, чтобы поймать, если нет мобильной сети (прием сигнала) и SMS не может быть отправлен?Android есть исключение из-за отсутствия мобильного сигнала?
ответ
Не исключено, что AFAIK, но вы можете использовать ConnectivityManger, чтобы получить такую информацию.
Вам также потребуется разрешение ACCESS_NETWORK_STATE
.
Вы должны понимать, что вызов 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", содержащий конкретное значение радиотехнологии, обычно полезно только для устранения неполадок.
Вы можете зарегистрировать этот обработчик, чтобы иметь дело с результатом:
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);
Хороший вопрос! [Посмотрите здесь] (http://stackoverflow.com/questions/8211081/android-to-check-if-the-phone-has-a-network-provider?lq=1) для «нормального» способа проверка наличия мобильной сети. Когда я просмотрел документацию API для 'telephony.SmsManager', метод' sendTextMessage' будет вызывать только исключение, если есть незаконные аргументы. – ConcurrentHashMap