android - reloj - desactivar todas las alarmas
Cómo detener la repetición de servicios de alarma en Android? (4)
Cree el mismo PendingIntent
que cuando registró la alarma y use AlaramManager.cancel()
para cancelarla.
Tengo totalTime = 1 hora yy intervalTime = 5min, ambos están en milisegundos,
Quiero repetir mis servicios de configuración de GPS cada intervalo y después de la finalización del tiempo total, este shoud repetitivo debe detenerse.
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent1 = new Intent(C2DMReceiver.this, GPSSetting.class);
PendingIntent pendingIntent = PendingIntent.getService(
C2DMReceiver.this, 0, intent1, 0);
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), intervalTime,
pendingIntent);
Entonces, ¿cómo puedo detener esta alarma repetitiva?
Saludos, Girish
Si ha configurado el servicio de alarma para repetir el intervalo de tiempo y desea cancelar sus servicios, entonces esta solución lo ayudará, aquí ante todo estoy creando servicios repetitivos cada 30 segundos, pero cuando presione el botón de detener, cancelará todos los servicios que he generado.
public void AlarmService_afte30sec()
{
Toast.makeText(this, "Starting Alarm Services", Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(this, StartAlarmServices.class);
pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
int sec=30;
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sec*1000, pendingIntent);
}
Ahora voy a detener / cancelar estos servicios usando el mismo "pendingintent" y "alarmManager", para cancelar esto el código será
public void stopservice()
{
alarmManager.cancel(pendingIntent);
}
Puede cancelar la alarma pasando el mismo intento pendiente que utilizó al configurar en el método cancelar del administrador de alarmas:
am.cancel(pendingIntent);
Puede pasar un valor adicional de intención como 1 hora (o cualquiera) de la hora actual del sistema. Luego puede verificar ese valor desde dentro del evento onBind () del servicio y compararlo. Lo siguiente es un ejemplo:
//your code:
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent1 = new Intent(C2DMReceiver.this, GPSSetting.class);
//my code:
intent1.putExtra("end", System.currentTimeMillis() + 3600000); //current time plus 1 hour
//your code:
PendingIntent pendingIntent = PendingIntent.getService(
C2DMReceiver.this, 0, intent1, 0); //You might wanna give PendingIntent.FLAG_UPDATE_CURRENT as flag.
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), intervalTime,
pendingIntent);
Luego dentro del método onBind ():
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
long end = intent.getLongExtra("end", 0);
if(end <= System.currentTimeMillis()){
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(
this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
}
return null;
}
No estoy seguro de si funcionará para los servicios, pero funcionó para BroadcastReceiver.