1

毎日特定の時間、たとえば毎朝 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);
}

ただし、前述したように、一度だけではなく、アクティビティを再起動し続けるだけです。これが動作する必要がある方法です。

私は何年もの間、これを整理しようとしてきました!

4

0 に答える 0