Cómo abortar BroadcastReceiver en android

Estoy haciendo una aplicación de programación de SMS que simplemente tendrá tiempo, sms y número de usuario y enviar este sms en un momento dado. Estoy usando PendingIntent . Aquí está mi código de ejemplo.

Cuando el usuario crea una programación, simplemente llama a este método.

 private void SendMessages() { Intent intent = new Intent(this, SMSBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, Timemilli, pendingIntent); } 

Y aquí está el archivo 'SMSBroadcastReceiver.java'

 public class SMSBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "SMS Sent !!!!.", Toast.LENGTH_LONG) .show(); // //Sms Sending try { SmsManager smsManager = SmsManager.getDefault(); for (int i = 0; i < SMSScheduleContactsActivity.SelectedContacts.length; i++) { smsManager.sendTextMessage( SMSScheduleContactsActivity.SelectedContacts[i], null, AddNewSmsSchedule.Message, null, null); } Log.d("testllllllllllllllll", "Message Sent"); } catch (Exception e) { e.printStackTrace(); } } } 

Mi pregunta es: cuando el usuario edita la programación, ¿cómo puedo cancelar esa transmisión y enviar una nueva ??? Como puede haber más de un horario, ¿cómo encontrar el speicific para cambiar / abortar?

Cuando el usuario edita la programación, ¿cómo puedo cancelar esa transmisión y enviar una nueva?

Call cancel() en AlarmManager con un equivalente PendingIntent al que utilizó para configurar la programación:

 Intent intent = new Intent(this, SMSBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); 

Como puede haber más de un horario, ¿cómo encontrar el speicific para cambiar / abortar?

Sólo hay una alarma en su implementación.

Si tiene una referencia a la intención pendiente, puede cancelar la intención. Si desea anular una emisión actual, puede utilizar abortBroadcast .

Ver también:

1) ¿Cómo obtener y cancelar un PendingIntent?

2) Detener la intención pendiente

3) Abortar / Cancelar emisiones

  • Público final void abortBroadcast ()

Se agrega en el nivel 1 de la API Establece el indicador que indica que este receptor debe abortar la emisión actual; Sólo funciona con transmisiones enviadas a través de Context.sendOrderedBroadcast. Esto evitará que otros receptores de radiodifusión reciban la emisión. Todavía llamará onReceive (Context, Intent) del BroadcastReceiver en el que pasó el llamador de Context.sendOrderedBroadcast.

Este método no funciona con emisiones no ordenadas como las enviadas con Context.sendBroadcast

Si está cambiando Timemilli , puede sendMessage() llamar a su función sendMessage() .

 alarmManager.set(AlarmManager.RTC_WAKEUP, Timemilli, pendingIntent); 

La función AlarmManager.set () cancelará automáticamente la alarma anterior siempre y cuando el pendingIntent sea el mismo; No tiene que ser la misma instancia, sino que necesita "coincidir" de acuerdo con Intent.filterEquals ():

Debido a este comportamiento, es importante saber cuándo dos Intentes se consideran los mismos para los propósitos de recuperar una PendingIntent. Un error común que la gente comete es crear múltiples objetos PendingIntent con Intents que solo varían en su contenido "extra", esperando obtener un PendingIntent diferente cada vez. Esto no sucede. Las partes de la Intención que se utilizan para hacer coincidir son las mismas definidas por Intent.filterEquals. Si utiliza dos objetos Intent que son equivalentes según Intent.filterEquals, obtendrá el mismo PendingIntent para ambos.

http://developer.android.com/reference/android/app/AlarmManager.html#set(int , long, android.app.PendingIntent)

http://developer.android.com/reference/android/app/PendingIntent.html http://developer.android.com/reference/android/content/Intent.html#filterEquals(android.content.Intent)

  • Enviar SMS sin guardarlo en el elemento enviado en kitkat
  • Android - cómo hacer que mi app sms aplicación por defecto programatically
  • Enviar SMS hasta que tenga éxito
  • SMSManager no funciona en Samsung Galaxy S3 LTE
  • Eliminar SMS de android en 4.4.4 (Afectado filas = 0 (cero), después de suprimido)
  • SMS GENERIC FAILURE en teléfonos Dual Sim Android
  • Recibir SMS Intent: Obtener identificación de mensaje o de hilo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.