#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:
Я просто поместил код в условие, что текущее время меньше требуемого.