Как заставить приложение запускать новое действие только в указанное время, не начиная с него

#android #android-intent #alarmmanager

#Android #android-намерение #alarmmanager

Вопрос:

Я хочу, чтобы мое приложение запускало действие «playing», когда пользователь выполняет действие «start» только в указанное время, скажем, в 17: 00: 00, и, если пользователь выполняет действие «start» в любое другое время после 17: 00: 00, действие «playing» не запускается. Я использовал этот код :

 Calendar calendar = Calendar.getInstance();
    calendar.set(2019, 2, 25, 17, 00,00);
    Intent intent = new Intent(Start.this, Playing.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(Start.this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    ((AlarmManager) getSystemService(ALARM_SERVICE)).set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
  

Проблема в том, что мне приходится «воспроизводить» действие в любое время после 17:00:00.
Что я должен изменить, чтобы ограничить его только точно указанным временем?

Ответ №1:

Вместо запуска действия вы можете запустить Service из диспетчера сигналов тревоги. А в вашем Service проверьте, находится ли ваше действие Start на переднем плане, и точно ли сейчас 17:00:00. И если условия соответствуют, только тогда начинайте свое действие из сервиса.

Ниже приведен код для проверки, находится ли какое-либо действие на переднем плане.

 public boolean isForeground(String myPackage) {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1); 
    String className = runningTaskInfo.get(0).topActivity.componentInfo.getClassName();
    return className.equals(YourActivityClassName);
}
  

Ответ №2:

Я просто поместил код в условие, что текущее время меньше требуемого.