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

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

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. Что я должен изменить, чтобы ограничить его только точным указанным временем?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

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

0 голосов
/ 25 марта 2019

Вместо запуска действия вы можете запустить 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);
}
...