Тревога срабатывает сразу, когда я устанавливаю AlarmManager, что я делаю неправильно в приведенном ниже коде - PullRequest
1 голос
/ 14 марта 2019

Alaram Manager Class

Я использую alaramManager.setRepeating для повторения каждый раз после некоторого интервала

public class AlarmService {

Long time;
AlarmManager alarmManager;
PendingIntent pendingIntent;
Context context;

public AlarmService(Context context){
    this.context = context;
}

public AlarmService(Context context, Long time) {
    this.time = time * 60000;
    Log.e("time",this.time+" AlaramService");
    this.context = context;
}

public void setAlarm() {
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, ReminderBroadcastReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), time, pendingIntent);

    Log.e("time",time+" setAlarm");

}

public void cancelAlarm() {
    Intent intent = new Intent(context, ReminderBroadcastReceiver.class);
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent,0);
    alarmManager.cancel(sender);
}

}

установка AlarmManager для вызова через определенное время

Long time = Long.valueOf(settingsData.getInterval().split(" ")[0]);
                AlarmService alarmService = new AlarmService(Setting.this,time);
                alarmService.cancelAlarm();
                alarmService.setAlarm();

ReminderBroadcastService для уведомлений

public class ReminderBroadcastReceiver extends BroadcastReceiver {


@Override
public void onReceive(final Context context, Intent intent) {
    Toast.makeText(context, "Received", Toast.LENGTH_SHORT).show();

    NotificationService notificationService = new NotificationService(context);
    notificationService.callNotification();
}

1 Ответ

2 голосов
/ 14 марта 2019

Вы передаете System.currentTimeMillis ()

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), time, pendingIntent);

для времени будильника в установленной функции будильника. Вот почему это срабатывает сразу. Вместо этого передайте будущее время, как будильник на следующий день в то же время, что и сейчас

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+86400000L, time, pendingIntent);
...