Intento pendiente con intención diferente pero id. Mismo
Tengo dos intención pendiente de usar con el Administrador de Alarma uno es:
Intent i = new Intent(context, TriggerAlarm.class); PendingIntent pi =PendingIntent.getBroadcast(context,0,i,PendingIntent.FLAG_CANCEL_CURRENT);
Y el otro es:
- ¿Cómo crear different pendingintent para que filterEquals () devuelva false?
- PendingIntent programado utilizando el tipo AlarmManager.RTC todavía se invoca en el modo de suspensión
- Android: ¿Cómo puedo acceder a un AsyncTask desde un PendingIntent creado por una notificación de barra de estado?
- ¿Se pueden usar intentos pendientes con las transmisiones locales?
- Android: Crear una sola tarea con actividades de varias aplicaciones (problema Lauchmode)
Intent i = new Intent(context, TriggerNotification.class); PendingIntent pi = PendingIntent.getBroadcast(context,0, i,PendingIntent.FLAG_CANCEL_CURRENT);
Yo uso estos dos en diferentes métodos en mi aplicación
mi pregunta es:
¿Estos differents pendientes se diferencian entre sí? Porque las intenciones son diferentes, pero los IDs son los mismos
Si configuro el administrador de alarmas para cada una de estas intenciones pendientes, ¿ambos activan o reemplazan a otro?
- Widget no actualizado en el reinicio del lanzador
- Enviar difusión al hacer clic en la notificación
- AlarmManager, BroadcastReceiver y el servicio no funciona
- ¿Qué sucede con las alarmas establecidas a través del administrador de alarmas de una aplicación, si la aplicación se desinstala
- Transmisión global o transmisión local con PendingIntent
- Buscando explicación de los laicos sobre el concepto de intención pendiente
- ¿Cómo enviar datos a través de PendingIntent a Broadcast?
- Intención con el extra antiguo en onCreate () para singleTask Actividad
Así que la manera fácil es probarlo directamente por ti mismo. Lo he probado en mi computadora y aquí es lo que tengo:
¿Son estos pendientes diferentes diferentes entre sí? Porque las intenciones son diferentes, pero los IDs son los mismos
-Si son diferentes entre sí, aunque los IDs son los mismos
Si configuro el administrador de alarmas para cada una de estas intenciones pendientes, ¿ambos activan o reemplazan a otro?
-Los dos se activarán
Aquí está mi código para la prueba, usted puede copiar y probarlo por usted mismo
Copie este método en su actividad y llámelo
private void setAlarmManager() { Log.v("AlarmManager", "Configuring AlarmManager..."); Intent startIntent1 = new Intent(context, AlarmReceiverFirst.class); PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, startIntent1, PendingIntent.FLAG_CANCEL_CURRENT); Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class); PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 20); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Log.v("AlarmManager", "Starting AlarmManager for >= KITKAT version"); alarm.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1); alarm.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent2); } else { Log.v("AlarmManager", "Starting AlarmManager for < KITKAT version"); alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1); alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent2); } Log.v("AlarmManager", "AlarmManager has been started"); }
Cree su primera clase de receptor
public class AlarmReceiverFirst extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v(this.getClass().getSimpleName(), "first alarm receiver is called"); } }
Cree su segunda clase de receptor
public class AlarmReceiverSecond extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v(this.getClass().getSimpleName(), "second alarm receiver is called"); } }
Registre esos receptores en su manifiesto
<receiver android:name=".AlarmReceiverFirst" /> <receiver android:name=".AlarmReceiverSecond" />
Para no confundir, lo que llamaste Id aquí se llama código de solicitud. Se utiliza para cancelar la intención pendiente.
Los intentos son sólo la acción que PendingIntent está obligado a ejecutar una vez que se activa. Pero estos criterios de activación dependen completamente de PendingIntent y RequestCode está jugando aquí un papel bastante bueno para identificar, gestionar y activar PendingIntent.
Por lo tanto, no importa cuál sea el intento, si se repite el requestCode, se activará el último PendingIntent. Si necesita activar múltiples PendingIntents, el requestCode debe ser diferente el uno del otro.
Usted puede tener el mismo nombre de intentos pero con diversos ids como el siguiente,
Intent i = new Intent(context, TriggerAlarm.class); PendingIntent pi =PendingIntent.getBroadcast(context,System.currentTimeMillis(),i,PendingIntent.FLAG_CANCEL_CURRENT);
Y
Intent i = new Intent(context, TriggerNotification.class); PendingIntent pi = PendingIntent.getBroadcast(context,System.currentTimeMillis(), i,PendingIntent.FLAG_CANCEL_CURRENT);
De esta manera, tanto las intenciones se distinguen de manera diferente entre sí y obtendrá triggered.You puede tener cualquier ID único en lugar de System.currentTimeMillis()
- Android Camera2 toque para enfocar la implementación – cancelación en el nuevo toque
- Error: No se pudo completar la ejecución de Gradle. Causa: Opción de línea de comandos desconocida '-X'