Verwenden Sie den AlarmManager von Android, um ein Ereignis zu planen

Vor ein paar Wochen schrieb ich einen Beitrag über das Chronometer-Widget von Android. Es eignet sich hervorragend zum Messen der verstrichenen Zeit. Was ist jedoch, wenn Sie in Zukunft eine Veranstaltung planen müssen? In einigen Fällen können Sie mit einem einfachen Post-Delayed-Handler davonkommen, aber die Handler-Klasse von Android garantiert keine Genauigkeit, und es kann schwierig sein, die relative Zeit eines Post-Handlers direkt mit einer deterministischen Kalender-Datumszeit zu korrelieren. In diesen Fällen gibt es keine bessere Klasse als den AlarmManager von Android.

Das folgende Beispiel zeigt die Verwendung der AlarmManager-Klasse in ihrer grundlegendsten Kapazität. Sie können dem Schritt-für-Schritt-Tutorial folgen oder das gesamte Projekt herunterladen und importieren.

1. Erstellen Sie ein neues Android-Projekt in Eclipse. Ziel Android 1.6 oder höher. Benennen Sie die Startaktivität in Main.java und das entsprechende Layout in main.xml um.

2. Unser Layout könnte nicht einfacher sein. In der Datei /res/main.xml erstellen wir ein lineares Layout, das eine einzelne Textansicht und eine Schaltfläche enthält.

main.xml

 "http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientierung = "vertikal" 
 android: layout_gravity = "center" 
 android: schwerkraft = "zentrum" > 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Alarmbeispiel" /> 
 android: id = "@ + id / the_button" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Set" /> 

3. In der Datei / src erstellen wir eine Aktivität, die einen On-Click-Handler implementiert. Wir müssen einige Variablen auf Klassenebene deklarieren. Die Überschreibung beim Erstellen ist dafür verantwortlich, die Schaltfläche mit dem Listener zu verbinden und unsere private Setup-Funktion aufzurufen.

Main.java

 Paket com.authorwjf.wakemeup; 
 import android.os.Bundle; 
 import android.os.SystemClock; 
 android.app.Activity importieren ; 
 import android.app.AlarmManager; 
 import android.app.PendingIntent; 
 android.content.BroadcastReceiver importieren ; 
 android.content.Context importieren ; 
 android.content.Intent importieren ; 
 import android.content.IntentFilter; 
 android.view.View importieren ; 
 android.view.View.OnClickListener importieren ; 
 android.widget.Toast importieren ; 
 public class Main erweitert Activity implementiert OnClickListener { 
 final static private long ONE_SECOND = 1000; 
 final static private long TWENTY_SECONDS = ONE_SECOND * 20; 
 PendingIntent pi; 
 BroadcastReceiver br; 
 AlarmManager am; 
 @Override 
 protected void onCreate (Bundle savedInstanceState) { 
 super .onCreate (savedInstanceState); 
 setContentView (R.layout. main ); 
 installieren(); 
 findViewById (R.id. the_button ) .setOnClickListener ( this ); 
 }} 
 }} 

4. Das Setup der privaten Methode initialisiert die Variablen auf Klassenebene, einschließlich des neuen Rundfunkempfängers, der als Rückruf für unseren Alarm fungiert.

 private void setup () { 
 br = neuer BroadcastReceiver () { 
 @Override 
 public void onReceive (Kontext c, Absicht i) { 
 Toast. makeText (c, "Rise and Shine!", Toast. LENGTH_LONG ) .show (); 
 }} 
 }; 
 registerReceiver (br, neuer IntentFilter ("com.authorwjf.wakeywakey")); 
 pi = PendingIntent. getBroadcast ( this, 0, new Intent ("com.authorwjf.wakeywakey"), 0); 
 am = (AlarmManager) ( dieser .getSystemService (Kontext. ALARM_SERVICE )); 
 }} 

5. Im On-Click-Listener stellen wir den Alarm ein. In unserem Beispiel stelle ich es für 20 Sekunden ab dem Zeitpunkt ein, zu dem die Schaltfläche angeklickt wurde.

 @Override 
 public void onClick (View v) { 
 am.set (AlarmManager. ELAPSED_REALTIME_WAKEUP, SystemClock. elapsedRealtime () + TWENTY_SECONDS, pi); 
 }} 

6. Der AlarmManager muss etwas bereinigt werden, wenn der Benutzer die Anwendung beendet. Wir können uns darum kümmern, indem wir die On-Destroy-Methode überschreiben.

 @Override 
 protected void onDestroy () { 
 am.cancel (pi); 
 unregisterReceiver (br); 
 super .onDestroy (); 
 }} 
Jetzt kann die Anwendung erstellt und ausgeführt werden. Stellen Sie es auf einem Gerät bereit, klicken Sie auf die Schaltfläche und warten Sie 20 Sekunden ( Abbildung A ). Abbildung A.

AlarmManager ist eine sehr leistungsstarke Klasse, die einen genaueren Blick auf die offizielle Android-Dokumentation verdient. In Kombination mit der PowerManager-Klasse kann der Alarmmanager das Gerät sogar aus dem Ruhezustand aktivieren, um Ihren Code zu einem späteren Zeitpunkt oder in einem wiederholbaren Intervall auszuführen.

© Copyright 2021 | mobilegn.com