2016-11-21 11 views
5

私は特定の日に削除する必要のあるデータベースを持っていますが、このタスクを実行するにはどうしたらいいですか?私はこれを見つけた:androidでタスクをスケジュールする方法

timer = new Timer(); 

timer.scheduleAtFixedRate(new TimerTask() { 

    synchronized public void run() { 

     \\ here your todo; 
     } 

    }}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1)); 

しかし、私はそれが有効期限まで "タスクを保存する"かどうか分からない。ありがとう

+0

[this link](http://stackoverflow.com/a/8801990/3800164)の回答は、今後このタスクをスケジュールするのに役立ちます。 –

+0

私の理解では、あなたのアプリが終了する前にタスクが生成されたならば、それは実行されません。アプリが終了している間に、タスクが実行されていた場合、OSによってブロックされる可能性があります。 @jiteshの下の答えは、あなたが探しているものかもしれません。 –

答えて

1

alaramマネージャを登録AlarmManagerクラスは がすることを繰り返しアラームのスケジューリングを可能に第二に、これらのalaramを受信する放送受信機を宣言する必要がまず将来の設定点で実行されます。 AlarmManagerはPendingIntentと指定され、アラームがスケジュールされるたびに発生します。アラームが がトリガーされると、登録されたインテントはAndroidシステムによってブロードキャストされ、 ターゲットアプリケーションを起動していない場合は起動します。

BroadcastReceiverから継承するクラスを作成します。 BroadcastReceiverがIntentブロードキャストを受信して​​いるときに呼び出されるonReceiveメソッドでは、タスクを実行するコードを設定します。

AlarmReceiver.java

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     // For our recurring task, we'll just display a message 
     Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show(); 

    } 

} 

私たちは、その後、マニフェストファイルにBroadcastReceiverを登録する必要があります。マニフェストファイルでAlarmReceiverを宣言します。

<application> 
    . 
    . 
    <receiver android:name=".AlarmReceiver"></receiver> 
    . 
    . 
</application> 

あなたの呼び出しアクティビティには、以下のインスタンス変数が含まれています。 onCreateで

private PendingIntent pendingIntent; 
private AlarmManager manager; 

()私たちは放送受信機のクラスを参照し、私たちのPendingIntentでそれを使用する意図を作成します。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Retrieve a PendingIntent that will perform a broadcast 
    Intent alarmIntent = new Intent(this, AlarmReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); 
} 

次に、定期的なアラームを設定する方法が含まれています。一度設定すると、アラームはX時間ごとに起動します。ここでは、10秒間という例を取っています。これを毎日計算するために単純に計算できます。

public void startAlarm(View view) { 
    manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    int interval = 10000; 

    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
    Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
} 

次に、必要に応じてcancelAlarm()メソッドを設定してアラームを停止します。

public void cancelAlarm(View view) { 
    if (manager != null) { 
     manager.cancel(pendingIntent); 
     Toast.makeText(this, "Alarm Canceled", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

こんにちは、私はレルムデータベースを使用していますが、私は' Activity'であるContextを渡す必要があります。どのように 'onReceive'を渡すことができますか?ありがとう –

+0

これは動作していません... "コンストラクタインテントを解決できません" 'Intent alarm = new Intent(this、AlarmReceiver.class);' –

2

これを行うには、特定の時間が経過した後に起動するAlaram Managerを使用する必要があります。

あなたは

public class DBActionReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     // perform delete operation here 
    } 

} 

AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 

    DBActionReceiver receiver = new DBActionReceiver(); 
    IntentFilter filter = new IntentFilter("ALARM_ACTION"); 
    registerReceiver(receiver, filter); 

    Intent intent = new Intent("ALARM_ACTION"); 
    intent.putExtra("param", "My scheduled action"); 
    PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0); 
    // invoke broadcast after one minute of my app launch 
    alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(1000 * 60), operation) ; 
+0

あなたのために働いていない場合は私に教えてください –

+0

私の答えを受け入れることができますか? –

+0

あまりにもうまくいきません!'getSystemService'は存在しません –

関連する問題