毎日特定の時間、たとえば毎朝 6 時にアクティビティを再現しようとしています。
現在、スケジュールされたタスクは機能していますが、アクティビティを一度再作成するのではなく、ループでスタックしているように継続的に再作成します。
私の主な活動から私は使用します:
scheduledRefresh.setAlarm(this);
次に、スケジュールされた更新で:
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, ScheduledRefreshService.class);
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, service);
}
//Alarm is set for a specific time each day
public void setAlarm(Context context) {
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, ScheduledRefresh.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
// The alarm is set for 6 am daily
calendar.set(Calendar.HOUR_OF_DAY, 06);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
ComponentName receiver = new ComponentName(context, ScheduledBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
public void cancelAlarm(Context context) {
// If the alarm has been set, cancel it.
if (alarmMgr!= null) {
alarmMgr.cancel(alarmIntent);
}
ComponentName receiver = new ComponentName(context, ScheduledBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
これにより、スケジュールされた更新サービスが呼び出され、アクティビティを再作成するための次のコードが含まれます。
protected void onHandleIntent(Intent intent) {
//restart mainActivity
Intent map = new Intent(MainActivity.getContext(),MainActivity.class);
map.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainActivity.getContext().startActivity(map);
ScheduledRefresh.completeWakefulIntent(intent);
}
ただし、前述したように、一度だけではなく、アクティビティを再起動し続けるだけです。これが動作する必要がある方法です。
私は何年もの間、これを整理しようとしてきました!