Android: determinar por qué no se pudo enviar SMS

Tengo una aplicación de recordatorio que enviará un SMS para notificar al usuario que su tiempo de recordatorio ha pasado. Esto funciona bien. Sin embargo, he estado probando lo que sucede cuando el teléfono ha estado dormido y se perdió un recordatorio.

Estoy usando AlarmManager para configurar alarmas que correspondan a los tiempos de recordatorio. Mi registro muestra que la alarma se apagó cuando se reinicia el teléfono y se produce un intento de enviar un SMS, pero el SMS no se recibe nunca.

Así que la pregunta es, ¿hay una manera de depurar por qué un SMS no se envía?

Mi código actual configura un ContentObserver cuando se produce un suceso de alarma:

  private void registerToListenForSentSMS() { MessageSentListener smsObeserver = new MessageSentListener(new Handler()); ContentResolver contentResolver = TheEveryOtherAlarmAppApplication.getAppContext().getContentResolver(); contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver); } 

MessageSentListener se notifica que ocurrió algún suceso de SMS:

 public class MessageSentListener extends ContentObserver { public MessageSentListener(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Log.d(Constants.ALARM_APP_LOG_TAG, "Something happend"); ContentResolver contentResolver = AlarmAppApplication.getAppContext().getContentResolver(); contentResolver.unregisterContentObserver(this); } } 

Pero esto podría ser causado por eventos SMS no relacionados con mi aplicación. De todos modos, realmente no me acercan a una solución – me gustaría saber lo que salió mal cuando no pasa nada !

En caso de que no se envíe un SMS de alarma, podría volver a enviar o utilizar otro método de notificación, como correo electrónico, etc.

Necesitará el receptor de la emisión y la intención pendiente de recibir notificación sobre los sms fallidos.

A continuación, el fragmento de código le ayudará

 //---sends an SMS message to another device--- private void sendSMS(String phoneNumber, String message) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0); //---when the SMS has been sent--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(context, "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SENT)); //---when the SMS has been delivered--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 
  • Registrar BroadcastReceiver para SMS entrantes
  • Android: documentación para el contenido: // sms / "type" values?
  • ¿Cómo enviar y recibir SMS desde la aplicación Android?
  • Android: recibe SMS largos (multipart)
  • No se puede instanciar el receptor en BroadcastReceiver SMS
  • Envío de sms a varias personas en android
  • Cómo borrar db cuando la aplicación se desinstala en android
  • IPhone o Android que utilizan la autenticación basada en SMS?
  • Cómo enviar SMS con Delphi XE5 en Android
  • Iniciar la aplicación sms con una intención
  • El envío de SMS mediante Intent no incluye destinatarios en algunos dispositivos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.