2011-11-18 9 views
5

que tienen totalTime = 1 hora y 5 minutos y intervalTime =, ambos están en milisegundos,Cómo dejar de repetir los servicios de alarma en Android?

quiero repetir mis servicios GPSSetting cada intervalo y después de la finalización de este totalTime repitiendo shoud ser parada.

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

+0

http://stackoverflow.com/questions/3330522/how-to-cancel-this-repeating-alarm – trante

Respuesta

4

crear el mismo PendingIntent como cuando se registró la alarma y el uso AlaramManager.cancel() para cancelarla.

+0

pero después de la hora específica –

+0

tienda la primera vez que la alarma funciona en alguna parte y calcular el tiempo transcurrido cada vez que se ejecuta . Si es más de 1 hora, cancele la alarma. –

+0

por favor me puede enviar el código fuente –

0

Usted puede cancelar la alarma al pasar la misma idea pendiente que utilizó al configurar en el método de cancelación de gestor de alarma:

am.cancel(pendingIntent); 
+1

@maneesh .... Quiero cancelar de forma automática la alarma después de 1 hr..entonces cómo puedo hacer esto ? –

+0

tiene que configurar otra alarma que actuará justo después de una hora y será responsable de cancelar solo la alarma específica – Maneesh

4

Si ha establecido un servicio de alarma para la repetición de intervalo de tiempo y desea para 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 dejar/cancelar estos servicios utilizando el mismo "pendingintent" y "AlarmManager", para cancelar este código será

public void stopservice() 
{ 
     alarmManager.cancel(pendingIntent);  
    } 
2

Puede pasar un valor extra intención como 1 horas (o cualquiera) de la hora actual del sistema. Luego puede verificar ese valor desde dentro del evento onBind() del servicio y compararlo. Lo que sigue 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); 

A continuación, dentro de la méthode 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 está seguro de si va a trabajar para los servicios pero funcionó para BroadcastReceiver.

Cuestiones relacionadas