Jelly Bean's ConnectivityManager har en ny goodie

Android-sjef Andy Rubin ble sitert i april 2012 og sa at det er 15 millioner linjer med kildekode som utgjør Googles operativsystem. Mens uttalelsen ble avgitt i forbindelse med Googles meget offentliggjorte juridiske problemer med Oracle, med tanke på at Android nettopp feiret sin 5 - årsdag, er 15 millioner kodelinjer en imponerende prestasjon av enhver standard.

Når en ny versjon av Android-operativsystemet slippes, pleier jeg å dykke rett inn og prøve de mest spionerte funksjonene for meg selv. Med Jelly Bean (Android 4.1) betydde det det nye og forbedrede "smør" -grensesnittet, det mye omtalte fancy varslet og det nye whiz-bang beam-grensesnittet. Men 15 millioner linjer med kildekode betyr at det også er noen gradvise endringer som, selv om de ikke nødvendigvis er overskriften verdige, ikke er noe å nyse av.

Jeg kom over en slik digital perle forrige uke; det er en enkel boolsk spørring som lar et program bestemme om den aktive tilkoblingen er "avmålt." På enkleste vilkår er en målert forbindelse en som koster brukeren penger, i de fleste tilfeller en mobildataplan (3 / 4G).

Den korte opplæringen som følger viser hvordan du bestemmer om en tilkobling måles, samt annen praktisk informasjon som kan hentes fra ConnectivityManager. Du kan følge med på eller laste ned kildekoden og importere den direkte til Eclipse.

1. Lag et nytt Android-prosjekt i Eclipse. For å bruke den nye Jelly Bean-spesifikke API-samtalen, må du målrette deg mot SDK 16 eller høyere. Sørg for å gi nytt navn til oppstartsfilen til Main.java og den tilhørende layoutfilen til main.xml, slik at du enkelt kan følge med eksemplet.

2. Åpne filen AndroidManifest.xml, og legg til tillatelsen for lese nettverksstatus.

AndroidManifest.xml

 "Http://schemas.android.com/apk/res/android" 
 package = "com.example.network_info" 
 android: versionCode = "1" 
 android: versionName = "1.0" > 
 android: minSdkVersion = "16" 
 android: targetSdkVersion = "16" /> 
 "android.permission.ACCESS_NETWORK_STATE" /> 
 android: icon = "@ drawable / ic_launcher" 
 android: label = "@ string / app_name" 
 android: theme = "@ style / AppTheme" > 
 android: name = ".Main" 
 android: label = "@ string / title_activity_main" > 
 "android.intent.action.MAIN" /> 
 "android.intent.category.LAUNCHER" /> 

3. Gå til mappen / res / layout og endre main.xml. Oppsettet vårt vil være et enkelt lineært oppsett med en tekstvisning og en redigeringstekst.

main.xml

 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "vertikal" 
 android: bakgrunn = "# 000000" > 
 android: layout_margin = "10dip" 
 android: textColor = "# 00ff00" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Detaljer" /> 
 android: layout_margin = "10dip" 
 android: gravitasjon = "øverst | venstre" 
 android: textColor = "#ffffff" 
 android: bakgrunn = "# 000000" 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: text = "Spørringsenhet, vennligst vent ..." 
 android: maxLines = "8" 
 android: minLines = "8" 
 android: redigerbar = "falsk" 
 android: enabled = "falsk" 
 android: rullefelt = "vertikal" 
 android: id = "@ + id / konsoll" /> 

4. Det siste trinnet er å legge til kode i /src/Main.java-filen. Den private funksjonen getNetworkStatus () er der magien skjer. Det er en grei sak å skaffe en forekomst av ConnectivityManager og deretter komme med noen spørsmål mot den.

Main.java

 pakke com.example.network_info; 
 import android.net.ConnectivityManager; 
 import android.net.NetworkInfo; 
 import android.os.Bundle; 
 import android.widget.EditText; 
 import android.app.Aktivitet; 
 import android.content.Context; 
 offentlig klasse Hoved utvider aktivitet { 
 @Overstyring 
 public void onCreate (Bundle savedInstanceState) { 
 super .onCreate (savedInstanceState); 
 setContentView (R.layout. main ); 
 getNetworkStatus (); 
 } 
 privat tomrom getNetworkStatus () { 
 ConnectivityManager manager = (ConnectivityManager) getBaseContext (). GetSystemService (Context. CONNECTIVITY_SERVICE ); 
 NetworkInfo-nettverk = manager.getActiveNetworkInfo (); 
 Stringtekst = "Er tilgjengelig?" + (Nettverk.isAvailable ()? "Ja": "nei") + "\ n"; 
 text + = "Er tilkoblet?" + (nettverk.isConnected ()? "ja": "nei") + "\ n"; 
 text + = "Nettverkstype:" + nettverk.getTypeName () + "\ n"; 
 text + = "Er avmålt?" + (manager.isActiveNetworkMetered ()? "ja": "nei") + "\ n"; 
 ((EditText) findViewById (R.id. Konsoll )). SetText (tekst); 
 } 
 } 
Den resulterende koden kan utføres på emulatoren eller en fysisk enhet ( figur A ). Hvis du bruker en faktisk enhet, kan du veksle mellom Wi-Fi og din mobile dataplan og observere forskjellen som er rapportert. Figur A

Når du har muligheten til å vite om den aktive tilkoblingen er tilgjengelig, så vel som om den tilkoblingen kan gi en stor regning for brukeren, kan du legge til kontroller og datatak til applikasjonene dine. Etter min mening er det mye smell for pengene dine - en funksjon som, takket være Jelly Bean, er enkel å implementere og en som brukerne dine sikkert kan sette pris på.

© Copyright 2021 | pepebotifarra.com