Android's BatteryManager og ProgressBar to-for-en-opplæringen

Når "Black Friday" nærmer seg, søker alle etter et godt kjøp, og jeg liker å tro at TechRepublic-lesere ikke er noe unntak. Det er grunnen til at denne uken min tutorial-tofer for Android: Jeg skal forklare hvordan du får gjeldende ladetilstand for en enhet og demonstrerer fremdriftsindikatoren.

Hvorfor vil en applikasjon være interessert i batteriets tilstand på telefonen? Vel, bør du allerede vite det ved å gå til Innstillinger | Om telefon | Batteri, brukere har muligheten til å få en topp 10 liste over batteri-sultne applikasjoner som kjører på enheten deres. Hvis appen din vises på listen, bør du absolutt være oppmerksom på strømforbruket.

Selv om appen din ikke lager den frekke listen, kan det likevel være verdt å vurdere hvor mye lading som er igjen på en telefon. Det avhenger av appene dine, men hvis du for eksempel starter opp tjenester for å utføre intensive bakgrunnsoverføringer, kan det ansvarlige handlingsforløpet være å utsette aktiviteten når batterisaft er i premie.

Sist, men ikke minst, hvis du som en smarttelefon-o-fil, er det morsomt å lage din egen batteriindikator. Det er også overraskende enkelt takket være noe Android-dokumentasjonen kaller en "klebrig" hensikt. I motsetning til standard sendinger som bare påkaller mottakeren din når en endring skjer, holder BatteryManager-sendingen fast på den siste hensikten, og rammene ringer mottakeren automatisk ved registrering. Nettoresultatet er at variablene dine kan initialiseres ved å bruke den samme metoden som oppdaterer dem.

Eksemplet som følger er kort og søtt. Du kan følge med på opplæringen eller laste ned prosjektet her og importere det direkte til Eclipse.

1. Bruk Eclipse til å lage et nytt Android-prosjekt som er målrettet mot SDK 1.6 eller nyere.

2. I mappen / res / layout vil vi lage en helt grunnleggende layout som inneholder to elementer: en tekstvisning og en fremdriftslinje. Legg merke til stilattributtet på fremdriftslinjen. Vi overstyrer standardstilen, som er den ubestemmelige spinneren, med systemet definert vannrett indikator. Noe annet du kanskje har lagt merke til, er minimumshøyden og bredden som er angitt på widgeten. Dette er ikke nødvendig, men å gjøre det gir oss en rektangulær fremdriftslinje som heller ser ut som et batteri, noe jeg syntes var passende i dette tilfellet.

 main.xml 

"1.0" encoding = "utf-8" ?>

http://schemas.android.com/apk/res/android

android: layout_width = "fill_parent"

android: layout_height = "fill_parent"

android: orientering = "vertikal" >

android: id = "@ + id / tekstfelt"

android: layout_marginTop = "40 dip"

android: layout_width = "wrap_content"

android: layout_height = "wrap_content"

android: layout_gravity = "sentrum" />

android: id = "@ + id / fremdriftslinje"

android: layout_width = "wrap_content"

android: layout_height = "wrap_content"

android: layout_marginTop = "20dip"

android: layout_gravity = "sentrum"

android: minWidth = "200dip"

android: minHeight = "100dip"

android: max = "100"

style = "? android: attr / progressBarStyleHorizontal" />

3. Akkurat som utformingen vår er ganske grei, takket være de klissete hensikten jeg nevnte, så er heller ikke Main.java-filen i / src-mappen veldig involvert. Vi må definere en global kringkastingsmottaker, overstyre mottakerhåndtereren, og i vår på opprette registrere mottakeren.

 Main.java- pakke com.authorwjf; import android.app.Aktivitet; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.widget.ProgressBar; import android.widget.TextView; offentlig klasse Hoved utvider aktivitet { private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver () { 

@Overstyring

public void onReceive (Kontekst c, Intens i) { int nivå = i.getIntExtra ("nivå", 0);

ProgressBar pb = (ProgressBar) findViewById (R.id. Progressbar );

pb.setProgress (nivå);

TextView tv = (TextView) findViewById (R.id. Textfield);

tv.setText ("Batterinivå:" + Heltall. toString (nivå) + "%");

}

};

/ ** Ringes når aktiviteten først opprettes. * /

@Overstyring

public void onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState);

setContentView (R.layout. main );

registerReceiver (mBatInfoReceiver, new IntentFilter (Intent. ACTION_BATTERY_CHANGED ));

}

}

Gratulerer, vi er ferdige! Det er en rekke avanserte alternativer BatteryManager støtter, men for rapportering av ladenivåer gjør SDK alt det tunge løftet for oss. Ved å kombinere BatteryManager med ikke mus, ingen krangel ProgressBar-klassen, har vi en funksjonell batteri-monitor med bare noen få linjer med kode. For en god del!

© Copyright 2020 | mobilegn.com