Построитель уведомлений, показывающий уведомление в случайное время - PullRequest
0 голосов
/ 14 ноября 2018

Я разрабатываю приложение, в котором пользователь хочет показывать уведомление по истечении установленного времени, например, 1 час, 2 часа, 30 минут, 40 минут, независимо от того, что он выберет.но проблема, с которой я сталкиваюсь, заключается в том, что уведомление появляется в случайное время.иногда он появляется через 1 час после выбора пользователем, а иногда через 30 минут.

Код для запуска трансляции

long intervalSpan = timeInterVal * 60 * 1000; // timeInterVal is the value user enters in minutes
    Calendar calendar = Calendar.getInstance();
    Intent intentAlarm = new Intent(this, AlarmBroadCastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentAlarm, 0);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), intervalSpan, pendingIntent);

// also tried alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), intervalSpan, pendingIntent);

код для отображения уведомления внутри трансляции

 builder = new NotificationCompat.Builder(context)
            .setContentTitle(title)
            .setContentText(content)
            .setSound(mReminderSound ? alarmSound : null)
            .setLights(mLed ? 0xff00ff00 : 0, 300, 100)
            .setVibrate(mVibraion ? vibrate : new long[]{0L})
            .setPriority(2)
            .setStyle(new NotificationCompat.BigTextStyle().bigText(content))
            .addAction(action)
            .setSmallIcon(R.mipmap.ic_stat_call_white)
            .setColor(Color.BLUE)
            .setLargeIcon(BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.ic_launcher_logo))
            .addAction(actionSnooze);


    builder.setContentIntent(pendingIntent);
    createNotification(contextl, builder);

}


private void createNotification(Context context, NotificationCompat.Builder builder) {
    mNotificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
    mNotificationManager.notify(Constants.NOTIFICATION_ID,
            builder.build());
}

Скажите, пожалуйста, чтоЯ делаю не так

1 Ответ

0 голосов
/ 14 ноября 2018

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

    ComponentName serviceComponent = new ComponentName(context, TestJobService.class);
    JobInfo.Builder builder = new JobInfo.Builder(15, serviceComponent);
    builder.setPeriodic(20*60*1000); // this will repeat after every 20 minutes
    builder.setPersisted(true);

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

TestJobService.class

public class TestJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters params) {
        // create notification here
        return false;
    }

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