AlarmManager не работает, задерживает задание расписания - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю над приложением планировщика, где я спрашиваю время пользователя, используя диалог Календарь.Затем я планирую задачу с помощью AlarmManager, вы можете увидеть код ниже.

    Log.d("SchedulerTag", "sendMessageLater: " + new Date(timeInMillis));
    Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
    intent.putExtra("message", message_string);
    intent.putExtra("number", end_number);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
        Toast.makeText(this, "Message Scheduled Successfully", Toast.LENGTH_SHORT).show();
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
        Toast.makeText(this, "Message Scheduled Successfully", Toast.LENGTH_SHORT).show();
    }

После этого я получаю его с помощью класса AlarmReceiver, код

public void onReceive(Context context, Intent intent) {
    //some code her
}

Проблема в том, что задачане планируя в нужное время, он вызывается только через 10 минут независимо от того, какое время было выбрано

Мой манифест содержит получателя.Что я делаю не так?

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать JobScheduler для повторения задачи.

ComponentName serviceComponent = new ComponentName(context, TestJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(15, serviceComponent);
builder.setMinimumLatency(500);
builder.setPersisted(true);

JobScheduler jobScheduler = (JobScheduler)context.getApplicationContext().getSystemService(JOB_SCHEDULER_SERVICE);
if (jobScheduler != null) {
    jobScheduler.schedule(builder.build());
}

TestJobService.class

открытый класс TestJobService extends JobService {

@Override
public boolean onStartJob(JobParameters params) {
    // do your code when job scheduler fires.
    return false;
}

@Override
public boolean onStopJob(JobParameters params) {
    return true;
}

}

...