Как перестать повторять службы тревоги в Android? - PullRequest
5 голосов
/ 18 ноября 2011

У меня totalTime = 1 час и intervalTime = 5 минут, оба в миллисекундах,

Я хочу повторять свои сервисы GPSSetting каждый интервал, и после завершения общего времени это повторение должно прекратиться.

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

Так как мне остановить этот повторяющийся сигнал тревоги?

С уважением, Гириш

Ответы [ 4 ]

5 голосов
/ 18 ноября 2011

Создайте тот же PendingIntent, что и при регистрации сигнала тревоги, и используйте AlaramManager.cancel() для его отмены.

4 голосов
/ 18 декабря 2012

Если вы установили службу будильника для повторяющегося интервала времени и хотите отменить свои услуги, то это решение поможет вам, здесь прежде всего я создаю повторяющиеся службы через каждые 30 секунд, но когда я нажму кнопкукнопка остановки, тогда он отменит все услуги, которые я сгенерировал.

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

Теперь я остановлю / откажусь от этих сервисов, используя те же «pendingintent» и «alarmManager», для отмены этого кода будет

  public void stopservice()
 {
        alarmManager.cancel(pendingIntent);      
   }
2 голосов
/ 12 февраля 2015

Вы можете передать дополнительное значение намерения как 1 час (или любое) из текущего системного времени. Затем вы можете проверить это значение внутри события onBind () сервиса и сравнить его. Ниже приведен пример:

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

Затем внутри метода 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;
}

Не уверен, что он будет работать для служб, но он работал для BroadcastReceiver.

0 голосов
/ 18 ноября 2011

Вы можете отменить сигнал тревоги, передав то же намерение, которое вы использовали при настройке в методе отмены диспетчера сигналов тревоги:

am.cancel(pendingIntent);
...