2011-11-18 14 views
5

devo totalTime = 1 ora e e intervalTime = 5min, entrambi sono in millisecondi,Come smettere di ripetere i servizi di allarme in Android?

voglio ripetere i miei servizi GPSSetting ogni intervallo e dopo il completamento di questo totalTime ripetendo shoud essere fermata.

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); 

Quindi, come posso interrompere questo allarme ripetuto?

saluti, Girish

+0

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

risposta

4

creare lo stesso PendingIntent come al momento della registrazione l'allarme e utilizzare AlaramManager.cancel() per annullarla.

+0

ma dopo l'ora specifica –

+0

Memorizza la prima volta che l'allarme viene eseguito da qualche parte e calcola il tempo trascorso ogni volta che viene eseguito . Se è più di 1 ora, cancella l'allarme. –

+0

per favore puoi inviarmi il codice sorgente –

0

È possibile annullare l'allarme facendo passare il lo stesso intento in sospeso è stato utilizzato durante la configurazione nel metodo cancellazione del direttore di allarme:

am.cancel(pendingIntent); 
+1

@maneesh .... Voglio essere automatico Annulla Allarme dopo 1 ora ... poi come posso Fai questo ? –

+0

devi impostare un altro allarme che funzionerà subito dopo un'ora e responsabile solo della cancellazione dell'allarme specifico – Maneesh

4

Se è stato impostato il servizio di allarme per la ripetizione intervallo di tempo e si desidera per cancellare i tuoi servizi, allora questa soluzione ti aiuterà, qui prima di tutto sto creando servizi ripetuti dopo ogni 30 secondi, ma quando premerò il pulsante stop, annulleremo tutti i servizi che ho generato.

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); 
    } 

ora mi fermo/annullare questi servizi utilizzando lo stesso "pendingintent" e "AlarmManager", per annullare questo il codice sarà

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

È possibile passare un valore aggiunto intento come 1 ore (o qualsiasi) dall'ora attuale del sistema. Quindi è possibile verificare tale valore dall'interno dell'evento onBind() del servizio e confrontarlo. Di seguito è riportato un esempio:

//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); 

Poi all'interno del methode 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; 
} 

Non sono sicuro se funzionerà per i servizi, ma ha funzionato per BroadcastReceiver.

Problemi correlati