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.
- ¿Cómo puedo enviar mensajes SMS en el BACKGROUND usando Android?
- SMS de confirmación no deseados enviados por el proveedor en Austria
- Abortar SMS Intent en Android KitKat
- Enviar SMS usando SmsManager en android falla en algún dispositivo
- ¿Cómo enviar un SMS usando SMSmanager en Dual SIM móvil?
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?
- Android: SMSManager - Intento de obtener longitud de matriz nula
- SMS no recibidos ... sólo en ciertos casos ... Carrier / Country?
- SendMultipartTextMessage y monitor enviar y recibir
- Administrador de sms de Android no envía sms
- SMS Manager envía mensaje mutlipart cuando hay menos de 160 caracteres
- Encontrar datamessage en el teléfono android antes de instalar la aplicación
- Informe de entrega de Android SmsManger
- ¿Cómo usar dos emuladores al mismo tiempo en el mismo proyecto en Android Studio?
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)
- No se puede agregar la dependencia de archivos XStream al proyecto de Android Studio
- Establecer recurso de fondo con Picasso