Bruk Android's AlarmManager for å planlegge en hendelse

For noen uker tilbake skrev jeg et innlegg på Android-kronometer-widgeten. Det fungerer utmerket til å måle forløpt tid, men hva om du trenger å planlegge en hendelse i fremtiden? I noen tilfeller kan du slippe unna med en enkel postforsinket behandler, men Android's handlerklasse garanterer ikke nøyaktighet, og det kan være vanskelig å direkte korrelere en innleggshåndterers relative tid til en deterministisk kalenderdato. I disse tilfellene er det ingen bedre klasse å håndtere jobben enn Android's AlarmManager.

Eksemplet som følger demonstrerer bruk av AlarmManager-klassen i sin mest grunnleggende kapasitet. Du kan følge med trinnvis veiledning eller laste ned og importere prosjektet i sin helhet.

1. Lag et nytt Android-prosjekt i Eclipse. Målrette Android 1.6 eller nyere. Gi nytt navn til oppstartsaktiviteten til Main.java og den tilhørende utformingen til main.xml.

2. Oppsettet vårt kunne ikke være enklere. I filen /res/main.xml lager vi en lineær layout som inneholder en enkelt tekstvisning og en knapp.

main.xml

 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "vertikal" 
 android: layout_gravity = "sentrum" 
 android: gravitasjon = "sentrum" > 
 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 = "Set" /> 

3. I / src-filen oppretter vi en aktivitet som implementerer en på-klikker. Vi må gå foran og erklære noen få variabler på klassetrinn. Overstyringen av on-line er ansvarlig for å koble opp knappen til lytteren og ringe vår private oppsettfunksjon.

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 utvider aktivitetsredskaper OnClickListener { 
 endelig statisk privat lang ONE_SECOND = 1000; 
 endelig statisk privat lang TWENTY_SECONDS = ONE_SECOND * 20; 
 VenterIntent pi; 
 BroadcastReceiver br; 
 AlarmManager am; 
 @Overstyring 
 beskyttet tomrom onCreate (Bundle savedInstanceState) { 
 super .onCreate (savedInstanceState); 
 setContentView (R.layout. main ); 
 oppsett (); 
 findViewById (R.id. the_button ) .setOnClickListener ( dette ); 
 } 
 } 

4. Den private metodekonfigurasjonen initialiserer variablene på klassnivå, inkludert den nye kringkastingsmottakeren som vil fungere som tilbakeringing av alarmen vår.

 privat tomromsoppsett () { 
 br = new BroadcastReceiver () { 
 @Overstyring 
 public void onReceive (Kontekst c, Intens i) { 
 Skål. makeText (c, "Rise and Shine!", toast. LENGTH_LONG ) .show (); 
 } 
 }; 
 registerReceiver (br, new IntentFilter ("com.authorwjf.wakeywakey")); 
 pi = VenterIntent. getBroadcast ( dette, 0, new Intent ("com.authorwjf.wakeywakey"), 0); 
 am = (AlarmManager) ( denne .getSystemService (kontekst. ALARM_SERVICE )); 
 } 

5. I klikklytteren stiller vi inn alarmen. For eksempel, setter jeg det i 20 sekunder fra det tidspunktet skjedde da knappen ble klikket.

 @Overstyring 
 public void onClick (Vis v) { 
 am.set (AlarmManager. ELAPSED_REALTIME_WAKEUP, SystemClock. forløptRealtime () + TWENTY_SECONDS, pi); 
 } 

6. AlarmManager krever litt opprydding når brukeren avslutter applikasjonen. Vi kan ta vare på dette ved å overstyre metoden for destruksjon.

 @Overstyring 
 beskyttet tomrom onDestroy () { 
 am.cancel (pi); 
 unregisterReceiver (br); 
 super .onDestroy (); 
 } 
Nå er applikasjonen klar til å bygge og kjøre. Distribuer den til en enhet, klikk på knappen og vent 20 sekunder ( figur A ). Figur A

AlarmManager er en veldig kraftig klasse som fortjener en nærmere titt på den offisielle Android-dokumentasjonen. Når det kombineres med PowerManager-klassen, har alarmsjef til og med makt til å vekke enheten fra hvilemodus for å kjøre koden på en fremtidig dato eller et repeterbart intervall.

© Copyright 2021 | pepebotifarra.com