2015-07-04 4 views
0

У меня есть уведомление с услугой трансляции, и я определил свое уведомление в oncreate моей основной деятельности, но проблема в том, что уведомление срабатывает снова и снова при каждом открытии основного действия. он должен срабатывать только в соответствии с установленным временем.Остановить уведомление при запуске при каждом запуске приложения

// Fire Notification from ReceiverReminder 
    Intent intent = new Intent(this, ReceiverReminder.class); 
    PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 
      PendingIntent.FLAG_CANCEL_CURRENT); 

    AlarmManager am = (AlarmManager) this 
      .getSystemService(Context.ALARM_SERVICE); 
    long recurring = (1 * 60000 * 60 * 24); // in milliseconds 
    am.setRepeating(AlarmManager.RTC, Calendar.getInstance() 
      .getTimeInMillis(), recurring, sender); 
    // 
+0

если вы пишете код в OnCreate он будет выполнять все время вы открыть, пока вы открываете свой код. рефакторировать его на любом методе и установить будильник, как при нажатии кнопки. – Sayem

ответ

2

Прочитайте описание метода setRepeating в developer.android.com
В соответствии с этим параметрами являются:

  • типа - Один из ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, или RTC_WAKEUP.
  • triggerAtMillis - время в миллисекундах, которое должно сначала отключиться, используя соответствующие часы (в зависимости от типа тревоги).
  • intervalMillis - интервал в миллисекундах между последующими повторами тревоги.
  • Операция - Действие, которое необходимо выполнить при срабатывании сигнализации; обычно происходит из IntentSender.getBroadcast().

Теперь вы передаете текущее время в качестве второго параметра, говоря его немедленно уволить, а затем повторяться каждые 1 * 60000 * 60 * 24 Миллис.

Если вы хотите, чтобы сигнал тревоги, чтобы стрелять в первый раз после 1 * 60000 * 60 * 24 Millis, изменение ваш метод к:

am.setRepeating(AlarmManager.RTC, Calendar.getInstance() 
     .getTimeInMillis() + recurring, recurring, sender); 

Edit:

на основе ваших комментариев , вы не должны сбрасывать будильник каждый раз, когда активность открывается. Поэтому вы должны сохранить свое состояние где-нибудь, например, в переменной в SharedPreferences. Так что ваш код должен Insted быть несколько, как это:

boolean areAlarmsAlreadySet = ...// get boolean variable from SharedPreferences 
if (!areAlarmsAlreadySet) 
{ 
    Intent intent = new Intent(this, ReceiverReminder.class); 
    PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 
     PendingIntent.FLAG_CANCEL_CURRENT); 

    AlarmManager am = (AlarmManager) this 
     .getSystemService(Context.ALARM_SERVICE); 
    long recurring = (1 * 60000 * 60 * 24); // in milliseconds 
    am.setRepeating(AlarmManager.RTC, Calendar.getInstance() 
     .getTimeInMillis() + recurring, recurring, sender); 

// set the variable in SharedPreferences to true 
} 
+0

Я пытаюсь запустить его каждые 24 часа – MaggotSauceYumYum

+0

У меня есть три службы с уведомлением о себе, каждый должен запускать его каждые 24 часа, другие 3 дня и 7 дней – MaggotSauceYumYum

+0

Проверьте отредактированный ответ. –

0
PendingIntent alarmIntent = PendingIntent.getBroadcast(this.getContext(), 0, intent, 0); 
    //After after 30 seconds 
alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, twopm.getTimeInMillis(), 30*1000 , alarmIntent); 

И

AndroidManifest.xml

<receiver android:name=".MyReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
    </receiver> 
+1

Что делают обе части? где я ставлю первый? любое объяснение? – MaggotSauceYumYum

Смежные вопросы