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();
}
}
Eine Antwort in [diesem Link] (http://stackoverflow.com/a/8801990/3800164) hilft Ihnen, die Aufgabe in Zukunft zu planen. –
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. –