Luo verkkomonitori Androidin TrafficStats-luokan avulla

Muutama viikko sitten kirjoitin opetusohjelman kuinka seurata akun tilaa Android-sovelluksesi sisällä. Tuossa viestissä kuvasin useita syitä, jotka saattavat koskea sovellustasi akun terveyteen. Mainittujen motiivien joukossa tärkein oli yksinkertaisesti sovelluksesi kirjoittaminen käyttämään laitteen rajallisia resursseja vastuullisella tavalla.

Samaa logiikkaa voidaan soveltaa puhelimen verkonkäyttöön, varsinkin kun otetaan huomioon, että kaikilla älypuhelinten käyttäjillä ei ole rajoittamatonta kaistanleveyssuunnitelmaa. Kaistanleveysvarausten ylittäminen voi kallistua nopeasti. Tietyissä sovellusskenaarioissa se, että käyttäjän annetaan konfiguroida sovelluksen kuluttama enimmäiskaistanleveys tietyssä ajassa, voi olla erittäin arvokas ominaisuustarjonta.

Android-käyttöjärjestelmän ensimmäisissä versioissa ei ollut vakiotapaa päästä kaistanleveyden mittareihin. Android 2.2: sta lähtien Google esitteli kuitenkin TrafficStats-luokan juuri tätä tarkoitusta varten. Seuraava opetusohjelma on nopea johdanto luokkaan. Tuloksena on yksinkertainen kaistanleveysmonitori, joka näyttää alustalle lähetettyjen ja vastaanotettujen tavujen kokonaismäärän sovelluksen käynnistämishetkestä lähtien. Voit seurata vaihe vaiheelta tai ladata koko projektin täältä ja tuoda sen suoraan Eclipseen.

1. Luo uusi Android-projekti Eclipse-sovellukseen. Muista käyttää TrafficStats-luokkaa, sinun on kohdistettava sovellusliittymään Android 2.2 (Froyo) tai uudemmalle.

2. Luodaan / res / layout-kansioon main.xml-resurssi. Käytämme tässä projektissa vain sarjaa tekstinäkymiä pystysuunnassa pinotussa lineaarisessa asettelussa.

 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: orientation = "pystysuora" > 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: textSize = "16sp" 
 android: textStyle = "lihavoitu" 
 android: painovoima = "keskusta" 
 android: paddingBottom = "20dip" 
 android: text = "Liikennetilastot-esittely" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: textSize = "14sp" 
 android: textColor = "# 00ff00" 
 android: painovoima = "keskusta" 
 android: text = "Lähetystavut" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: textSize = "14sp" 
 android: painovoima = "keskusta" 
 android: text = "0" 
 android: id = "@ + id / TX" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: textSize = "14sp" 
 android: textColor = "# ff0000" 
 android: painovoima = "keskusta" 
 android: text = "Vastaanotavat tavut" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: textSize = "14sp" 
 android: painovoima = "keskusta" 
 android: text = "0" 
 android: id = "@ + id / RX" /> 

3. Kun asettelumme on paikallaan, voimme siirtyä / src-kansioon. Luo Main.java laajentamalla Aktiivisuusluokkaa. Mennään myös julistamaan kolme yksityisluokan muuttujaa.

 Main.java 
 paketti com.authorwjf; 
 tuo android.app.Activity; 
 tuo android.app.AlertDialog; 
 Tuo android.net.TrafficStats; 
 tuo android.os.Bundle; 
 tuo android.os.Handler; 
 tuo android.widget.TextView; 
 public class Main laajentaa toimintaa { 
 yksityinen käsittelijä mHandler = uusi käsittelijä (); 
 yksityinen pitkä mStartRX = 0; 
 yksityinen pitkä mStartTX = 0; 
 } 

4. Käytämme on luoda-ohitus -toimintoa yksityistääksemme muuttujamme ja ajoittaaksemme takaisinsoiton käyttöliittymän säikeeseen. Tee muistiinpano enum TrafficStats.UNSUPPORTED -tarkistuksesta. Vaikka kokemukseni TrafficStats-luokasta on ollut ilman kiinnitystä, Googlen virallisissa asiakirjoissa todetaan, että jotkut laitteet eivät välttämättä tue tämän tyyppistä raportointia, ja silloin puhelu palauttaa edellä mainitun arvon. Tästä syystä on hyvä idea kirjoittaa koodisi puolustavasti, kuten olen osoittanut täällä.

 Main.java 
 @Ohittaa 
 public void onCreate (Bundle savedInstanceState) { 
 super .onCreate (tallennettuInstanceState); 
 setContentView (R.layout. pää ); 
 mStartRX = TrafficStats. getTotalRxBytes (); 
 mStartTX = TrafficStats. getTotalTxBytes (); 
 if (mStartRX == TrafficStats. TUETTAMATON || mStartTX == TrafficStats. TUKEMATTOMAT) { 
 AlertDialog.Builder alert = uusi AlertDialog.Builder ( tämä ); 
 alert.setTitle ("Voi!"); 
 alert.setMessage ("Laitteesi ei tue liikenteen tilan seurantaa."); 
 alert.show (); 
 } muuta { 
 mHandler.post viivästynyt (mRunnable, 1000); 
 } 
 } 

5. Viimeisenä, mutta ei vähäisimpänä, meidän on päivitettävä näyttömme ja ajoitettava ajettava uudelleen.

 Main.java 
 yksityinen lopullinen Runnable mRunnable = new Runnable () { 
 julkinen mitätön ajo () { 
 TextView RX = (TextView) findViewById (R.id. RX ); 
 TextView TX = (TextView) findViewById (R.id. TX ); 
 pitkät rxBytes = TrafficStats. getTotalRxBytes () - mStartRX; 
 RX.setText (pitkä. Nauhaan (rxBytes)); 
 pitkät txBytes = TrafficStats. getTotalTxBytes () - mStartTX; 
 TX.setText (pitkä. Nauhaan (txBytes)); 
 mHandler.post viivästynyt (mRunnable, 1000); 
 } 
 }; 

Esimerkki ilmoittaa vain tavujen kokonaismäärän laitteessa ja laitteesta, mutta kehotan teitä tutkimaan TrafficStats-luokkaa tarkemmin. Löydät luokan, joka pystyy ilmoittamaan mittarit pakettien avulla tavujen sijasta, sekä menetelmät mobiili- ja Wi-Fi-verkon I / O: n erottamiseksi toisistaan.

Kuvio A

© Copyright 2020 | mobilegn.com