Android 如何使应用程序仅在指定时间启动新活动,而不是从它开始

Android 如何使应用程序仅在指定时间启动新活动,而不是从它开始,android,android-intent,alarmmanager,Android,Android Intent,Alarmmanager,我想让我的应用程序开始活动播放,当用户只在指定的时间开始活动时,比如说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); PendingInt

我想让我的应用程序开始活动播放,当用户只在指定的时间开始活动时,比如说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之后的任何时候都要参加活动。
我应该更改什么以将其限制在精确的指定时间?

您可以从alarm manager启动服务,而不是启动活动。在您的服务中,检查您的活动开始是否在前台,并且正好是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);
}

我只是将代码放入一个条件中,即当前时间小于所需时间