2013-04-04 2 views
0
private void scheduleAlarms(Context context) { 
     AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent intentOnAlaramReceiver = new Intent(context, OnAlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentOnAlaramReceiver, 0); 

     String listOfIntervalConnection = Utils.getStringFromProperties(context, Properties.SP_LIST_OF_ENABLE_INTERVAL_CONNECTIONS, Properties.ENABLE_AFTER); 
     long enableAfter = DateUtils.MINUTE_IN_MILLIS * Long.parseLong(listOfIntervalConnection); 

     alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + enableAfter, enableAfter, pendingIntent); 
    } 

и я стараюсь, чтобы отменить сигнал тревоги, какAlarmManager как отменить повторение

AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
      Intent intentOnAlaramReceiver = new Intent(context, OnAlarmReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentOnAlaramReceiver, 0); 

      alarmManager.cancel(pendingIntent); 

но sometimne отменяется иногда до сих пор работает. Почему и как? Что я могу сделать?

ответ

1

При запуске службы вы используете разные экземпляры намерения в PendingIntent и отменяете его.

установить намерение службы как переменную экземпляра и использовать ее как при запуске, так и при прекращении службы.

+0

, но если я хочу отменить его после 1 дня работы, GC удалит экземпляр или нет? Класс недоступен навсегда, – mbrc

0

Попробуйте использовать PendingIntent.FLAG_UPDATE_CURRENT вместо 0; Например:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentOnAlaramReceiver, PendingIntent.FLAG_UPDATE_CURRENT); 
Смежные вопросы