2016-11-21 6 views
5

Ich habe eine Datenbank, die ich an einem bestimmten Tag löschen muss, wie kann ich diese Aufgabe durchführen? Ich fand das:Wie plane ich eine Aufgabe auf Android

Aber ich bin mir nicht sicher, ob es "die Aufgabe" bis zum Verfalltag speichern wird. Danke

+0

Eine Antwort in [diesem Link] (http://stackoverflow.com/a/8801990/3800164) hilft Ihnen, die Aufgabe in Zukunft zu planen. –

+0

Mein Verständnis ist, dass, wenn Ihre App _before_ beenden würde die Aufgabe erzeugt wurden, dann nein, es würde nicht ausgeführt werden. Wenn Ihre App versucht hat, _while_ zu beenden, während die Aufgabe ausgeführt wurde, blockiert das Betriebssystem sie möglicherweise. Die folgende Antwort von @jitesh könnte das sein, wonach Sie suchen. –

Antwort

1

Der Alarmmanager-Klasse die Planung von wiederholten Alarmen, dass ermöglicht wird in Zukunft an bestimmten Punkten laufen. Der AlarmManager erhält eine PendingIntent, die ausgelöst wird, wenn ein Alarm geplant wird. Wenn ein Alarm ausgelöst wird, wird die registrierte Absicht vom Android-System gesendet, Starten der Zielanwendung, wenn es nicht bereits ausgeführt wird.

Erstellen Sie eine Klasse, die von BroadcastReceiver erbt. In der onReceive-Methode, die aufgerufen wird, wenn der BroadcastReceiver eine Intent-Übertragung empfängt, richten wir den Code ein, der unsere Aufgabe ausführt.

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(); 

    } 

} 

Wir müssen dann die BroadcastReceiver in der Manifest-Datei registrieren. Deklarieren Sie den AlarmReceiver in der Manifestdatei.

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

Geben Sie in Ihrer aufrufenden Aktivität die folgenden Instanzvariablen ein.

private PendingIntent pendingIntent; 
private AlarmManager manager; 

In onCreate() wir eine Absicht schaffen, die unsere Rundfunkempfänger Klasse verweist und verwendet sie in unserer 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); 
} 

Wir fügen dann die Methode hinzu, die die wiederkehrenden Alarme einrichtet. Einmal eingestellt, wird der Alarm nach jeder X-Zeit ausgelöst, hier nehmen wir 10 Sekunden. Beispiel: Sie können das einfach berechnen, um es für jeden Tag auszulösen.

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(); 
} 

Als nächstes werden wir auch die Methode cancelAlarm() einrichten, um die Alarme bei Bedarf zu stoppen.

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

Hallo, ich benutze Realm Database, aber ich muss einen Kontext übergeben, der eine' Aktivität' ist, wie kann ich das von 'onReceive' weitergeben? Danke –

+0

Es funktioniert nicht ... "Kann den Konstruktor Intent nicht auflösen" 'Intent Alarm = neue Absicht (dies, AlarmReceiver.class);' –

2

Um dies zu tun, müssen Sie Alaram Manager verwenden, der nach bestimmter Zeit aufgerufen wird.

Zuerst müssen Sie Rundfunkempfänger erklären, wer diese alaram

public class DBActionReceiver extends BroadcastReceiver { 

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

} 

Zweitens erhalten, registrieren Sie sich jetzt alaram Manager

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

Bitte lassen Sie mich wissen, ob oben angegeben und nicht für Sie arbeiten –

+0

können Sie bitte meine Antwort akzeptieren. –

+0

Es funktioniert nicht auch!'getSystemService' existiert nicht –

Verwandte Themen