Brug Android's AlarmManager til at planlægge en begivenhed

For et par uger tilbage skrev jeg et indlæg på Android's chronometer-widget. Det fungerer godt til at måle forløbet tid, men hvad nu hvis du har brug for at planlægge en begivenhed i fremtiden? I nogle tilfælde kan du slippe af sted med en simpel postforsinket handler, men Android's handlerklasse garanterer ikke nøjagtighed, og det kan være vanskeligt at direkte korrelere en posthåndterers relative tid til en deterministisk kalenderdato. I disse tilfælde er der ingen bedre klasse til at håndtere jobbet end Android's AlarmManager.

Eksemplet, der følger, viser brugen af ​​AlarmManager-klassen i sin mest basale kapacitet. Du kan følge med trinvis vejledning eller downloade og importere projektet i sin helhed.

1. Opret et nyt Android-projekt i Eclipse. Mål Android 1.6 eller nyere. Omdøb startaktiviteten til Main.java og det tilsvarende layout til main.xml.

2. Vores layout kunne ikke være enklere. I filen /res/main.xml opretter vi et lineært layout, der indeholder en enkelt tekstvisning og en knap.

main.xml

 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "lodret" 
 android: layout_gravity = "center" 
 android: gravitation = "center" > 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Alarmeksempel" /> 
 android: id = "@ + id / the_button" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Sæt" /> 

3. I filen / src opretter vi en aktivitet, der implementerer en on-click handler. Vi er nødt til at gå videre og erklære et par klassetrin-variabler. Tilsidesættelse af ansvaret er ansvarlig for at tilslutte knappen til lytteren og ringe til vores private opsætningsfunktion.

Main.java

 pakke com.authorwjf.wakemeup; 
 import android.os.Bundle; 
 import android.os.SystemClock; 
 import android.app.Aktivitet; 
 import android.app.AlarmManager; 
 import android.app.PendingIntent; 
 import android.content.BroadcastReceiver; 
 import android.content.Context; 
 import android.content.Intent; 
 import android.content.IntentFilter; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.Toast; 
 public class Main udvider Aktivitetsimplementeringer OnClickListener { 
 endelig statisk privat lang ONE_SECOND = 1000; 
 endelig statisk privat lang TWENTY_SECONDS = ONE_SECOND * 20; 
 VenterIntent pi; 
 BroadcastReceiver br; 
 AlarmManager am; 
 @Override 
 beskyttet tomrum onCreate (Bundle gemtInstanceState) { 
 super .onCreate (gemtInstanceState); 
 setContentView (R.layout. main ); 
 Opsætning(); 
 findViewById (R.id. the_button ) .setOnClickListener ( dette ); 
 } 
 } 

4. Opsætningen af ​​den private metode initialiserer klassevariablerne, inklusive den nye tv-modtager, der fungerer som tilbagekald til vores alarm.

 privat tomrumsopsætning () { 
 br = new BroadcastReceiver () { 
 @Override 
 public void onReceive (Kontekst c, hensigt i) { 
 Ristet brød. makeText (c, "Rise and Shine!", toast. LENGTH_LONG ) .show (); 
 } 
 }; 
 registerReceiver (br, ny IntentFilter ("com.authorwjf.wakeywakey")); 
 pi = VenterIntent. getBroadcast ( dette, 0, ny hensigt ("com.authorwjf.wakeywakey"), 0); 
 am = (AlarmManager) ( denne .getSystemService (kontekst. ALARM_SERVICE )); 
 } 

5. I on-click lytteren indstiller vi alarmen. For vores eksempel indstiller jeg det i 20 sekunder fra det tidspunkt, hvor der skete, da der blev klikket på knappen.

 @Override 
 offentligt ugyldigt onClick (Vis v) { 
 am.set (AlarmManager. ELAPSED_REALTIME_WAKEUP, SystemClock. forløbet Realtime () + TWENTY_SECONDS, pi); 
 } 

6. AlarmManager kræver en smule oprydning, når brugeren afslutter applikationen. Vi kan tage os af dette ved at tilsidesætte metoden til destruktion.

 @Override 
 beskyttet tomrum onDestroy () { 
 am.cancel (pi); 
 unregisterReceiver (br); 
 super .onDestroy (); 
 } 
Nu er applikationen klar til at bygge og køre. Distribuer den til en enhed, klik på knappen og vent 20 sekunder ( figur A ). Figur A

AlarmManager er en meget magtfuld klasse, som fortjener et nærmere kig på den officielle Android-dokumentation. Når det kombineres med PowerManager-klassen, har alarmstyreren endda magten til at vække enheden fra dvale og køre din kode på en fremtidig dato eller et gentageligt interval.

© Copyright 2021 | mobilegn.com