android configurar múltiples alarmas simultaneosuly
Ok, permítanme modificar la pregunta y hacerlo mucho más fácil. Espero que puedas conseguirme la solución para esto. Ambas alarmas deben programarse simultáneamente, lo que no ocurre aquí. Incluso estoy usando código de solicitud único para la intención pendiente. Ayudame por favor…..
// En el Listener de clics
private OnClickListener mOneShotListener = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(AlarmController.this, OneShotAlarm.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0); //I even tried sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, PendinIntent.FLAG_UPDATE_CURRENT); //the alarm to go off 30 seconds from now. Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 30); // Schedule the alarm! AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); //adds 2 minutes to the time calendar.add(Calendar.MINUTE, 2); sender = PendingIntent.getBroadcast(AlarmController.this,1, intent,0); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender2); } };
OLD Pregunta:
Quiero configurar dos alarmas al mismo tiempo para que se realicen dos operaciones diferentes.
Por ejemplo Un usuario fija la alarma en 2'O reloj y fija la duración a 15 minutos. La primera alarma debe disparar a 2'O reloj que realiza la función1 y la segunda alarma debe disparar a las 2:15 como el usuario especificó la duración como 15 minutos que realiza la función2. Esta operación debe repetirse todos los días a las 2'O horas a menos que el usuario cambie el tiempo.
Estoy llamando a ambas funciones en el botón de clic:
Un evento de clic
saveButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { .......... .......... new ReminderManager(this).setReminder(mRowId, mCalendar); new ReminderManager(this).wakeReminder(mRowId, mCalendar, duration); } }
El setReminder contiene
// ajusta la alarma a las 2'O hora
public void setReminder(Long taskId, Calendar when, String duration){ Intent i = new Intent(mContext, OnAlarmReceiver.class); i.putExtra(RemindersDbAdapter.KEY_ROWID, (long)taskId); PendingIntent pi = PendingIntent.getBroadcast(mContext,(int)System.currentTimeMillis(), i, PendingIntent.FLAG_UPDATE_CURRENT); mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi); }
El wakeReminder contiene
// agrega duración ie 15mins
public void wakeReminder(Long taskId, Calendar when, String duration){ Intent i = new Intent(mContext, OnAlarmReceiverWake.class); i.putExtra(RemindersDbAdapter.KEY_ROWID, (long)taskId); Long d = Long.parseLong(duration); Long mins = d*60*100; Long milli = when.getTimeInMillis() + mins; PendingIntent pi = PendingIntent.getBroadcast(mContext, (int)System.currentTimeMillis(), i, PendingIntent.FLAG_UPDATE_CURRENT); mAlarmManager.set(AlarmManager.RTC_WAKEUP, milli, pi); }
He notado que siempre que mAlarmManager.set();
se ejecuta correctamente el LogCat
muestra la notificación como
"enqueueToast pkg=com.jellboi.android.togglemode callback=android.app ITransientNotification$stub$proxy@43c0c5f8 duration=0"
pero cuando configuro ambas alarmas simultáneamente, la notificación no se muestra cuando mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
se ejecuta pero la notificación se muestra cuando mAlarmManager.set(AlarmManager.RTC_WAKEUP, milli, pi);
es ejecutado. También la notificación se fija para el tiempo original es decir 2'O reloj y no después de agregar 15mins a su duración.
Por favor ayuda, he intentado un montón de maneras de llamar a esta funciones en diferentes lugares como después de la primera alarma se disparó, pero todo en vano.
- Administrador de alarmas en android
- Cancelar un AlarmManager pendienteIntent en otro pendienteintent
- Cómo reiniciar la alarma si la aplicación se cierra forzada en android
- ¿Cómo configurar una alarma de repetición exacta en API 19 (kitkat)?
- Android Intención de inicio Actividad principal de la aplicación
- Ejemplo del Administrador de alarmas
- ¿Qué sucede cuando inicio una alarma dos veces?
- OnReceiver de BroadcastReceiver no llamado, AlarmManager
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0);
Usted tiene problema en esta línea. Si desea disparar simultáneamente dos alarma entonces debe hacer algo como esto
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,giveUniqueRequestIdsHere, intent, 0);
sender = PendingIntent.getBroadcast(this, (int) System.currentTimeMillis(), i, PendingIntent.FLAG_ONE_SHOT);
Haga lo mismo con su PendingIntent.getActivity ();
Hola, intento usar esto para generar solicitud que estaba generando mi propio código de solicitud, pero esta línea funcionó para mí
final int intent_id = (int) System.currentTimeMillis();
Cuando se lanza OneShotAlarm.class, tiene que diseñar el modo de inicio. La configuración predeterminada ignoraría la segunda vez que se iniciara, si la primera instancia aún existía.
Intent intent = new Intent(AlarmController.this, OneShotAlarm.class); intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
parece que se olvidó de establecer "sender2" antes de su segunda llamada.
usted cambia el valor del remitente, entonces pone sender2 como el argumento.
Prueba esto:
Calendar cal = new GregorianCalendar(); Date date = cal.getTime(); cal.clear(); Cursor c = database.query(mArray.get(mPosition), new String[]{"days"},"days"+"!="+0, null, null, null, null); cal.set(Calendar.YEAR,2011); cal.set(Calendar.MONTH,date.getMonth()); cal.set(Calendar.DAY_OF_MONTH,date.getDate()); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, min); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(nextScreen.this, AlaramReciver.class); i.putExtra("Start",mArray.get(mPosition)); Editor medit = getSharedPreferences("Start", 0).edit(); medit.putString("Start", mArray.get(mPosition));medit.commit(); PendingIntent pendingintent = PendingIntent.getBroadcast(this,mPosition, i, 0); mgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingintent);
Usted ha fijado al tiempo como esto, y una vez que usted fija la hora en el encargado de la alarma llamará automáticamente las funciones diarias. Utilizar código de solicitud diferente para pendingintent
.
Si desea llamar a la segunda función. Usted acaba de añadir el tiempo en 15 min en el
cal.set(Calender.MINUTE,min+15);