2010-12-13 13 views
7

Ich arbeite an einer App und es ist fast fertig mit Ausnahme von nur einer Sache: Ich weiß nicht, wie Link Geschwindigkeit und legen Sie es in der Statusleiste.Ich bin neu in Java, also wenn jemand mir helfen könnte, würde ich sein sehr dankbar. P.S. Entschuldige mein schlechtes Englisch.Wie programmgesteuerte Verbindungsgeschwindigkeit erhalten?

+1

Was soll die Verbindungsgeschwindigkeit sein? –

+0

meinst du die Bandbreite Download-Geschwindigkeit? oder vielleicht verweisen Sie auf einen unbestimmten Fortschrittsbalken? – Franco

+0

Möchten Sie wissen, wie schnell die Internetverbindung heruntergeladen werden kann? Oder wie schnell es im Moment ist, Sachen herunterzuladen? Oder etwas ganz anderes? –

Antwort

34

Wie die Replikatoren vorschlagen, ist Ihre Frage nicht sehr klar. Sie könnte mit Bezug auf die Link Verbindungsgeschwindigkeit (dh bis zu 54 Mbps mit gutem Signalempfang Wifi oder bis zu 7,2 Mbps mit voller Geschwindigkeit HSDPA), die abhängig ist:

  • Die Netzwerk-Schnittstelle Sie verwenden bei eine Zeit. Einige Telefone erlauben Tethering, dh Sie können sowohl Wifi als auch Mobile Data Link (GPRS/3G/HSDPA) gleichzeitig oder bei automatischer Umschaltung aktivieren (wenn Ihre WLAN-Verbindung abbricht, schaltet Ihr Telefon automatisch auf Mobiles Netzwerk um, falls aktiviert).
  • Die Verbindungsgeschwindigkeit auf einmal ausgehandelt. Abhängig von der Signalqualität/Carrier-Netzwerkkonfiguration (einige haben eine maximale Geschwindigkeit)/Mobildatenvertrag (die monatliche Bandbreite überschreitet normalerweise die GPRS-Geschwindigkeit).

In diesem Fall fürchte ich, gibt es keine Standard-Java-API-Methoden, es zu wissen, aber die Android API die benötigte Funktionalität:

  • Für WiFi Link Geschwindigkeitskontrolle WifiInfo.getLinkSpeed()
  • für Mobile Data Link Ich habe Angst, dass Sie nur TelefonyManager.getNetworkType() überprüfen können, um den aktuellen Mobile Data Link-Typ zu ermitteln. Sie sollten dann die tatsächliche Geschwindigkeit nach Link-Typ (d. H. Für GPRS bis zu 128 kbps, für EDGE bis zu 236,8 kpbs, für 3G bis zu 2 Mbps, für HSDPA bis zu 7,2 Mbps). Berücksichtigen Sie, dass dies nur eine Annäherung ist. Sie könnten mit HSDPA verbunden sein, aber Ihr Mobilfunkanbieter begrenzt die Höchstgeschwindigkeit auf 2 Mbps.

Im anderen Fall, dass Sie die aktuelle (Download/Upload) Datenverbindungsgeschwindigkeit diese beziehen sich auf hohem Niveau nur verfügbar, tatsächlich nicht die Verbindungsgeschwindigkeit messen, sondern die Geschwindigkeit zwischen dem Telefon und einem Server, das kann nicht nur durch Ihre Verbindungsgeschwindigkeit bestimmt werden, sondern auch durch viele andere Faktoren (alle Verbindungen zwischen Ihrem Telefon, einem Server, dem Server selbst usw.). Sie könnten einfach die "HTTP-Level-Geschwindigkeit" messen, was HTTP-Datengeschwindigkeit bedeutet (ohne Overhead-Traffic für Datenpakete), da normalerweise nur HTTP-Verbindungen in jedem Szenario unterstützt werden (Ihr Carrier könnte Sie hinter einem Proxy verstecken, der alles außer HTTP ausfiltert) der Verkehr).

Wenn Sie 8-Level-API verwenden, ist auch eine interessante Funktion namens TrafficStats verfügbar. Auf diese Weise können Sie die gesendeten/empfangenen Pakete auf niedrigem Niveau kennenlernen, die von Ihrem Telefon über den Mobile Data Link ausgetauscht werden. Diese Daten können nur die gesuchten Informationen enthalten (verwenden Sie diese Messungen mit abgelaufenen Zeiten und messen Sie einfach aktuelle/durchschnittlich verwendete Daten) Verbindungsgeschwindigkeit).

+0

Vielen Dank für Ihre schnelle Antwort – 4yBAk

+0

Können Sie im Hinblick auf die Erkennung 3G-Verbindungsgeschwindigkeit ins Detail gehen? Wenn ich TelefonyManager.getNetworkType() ausgabe, gibt es "CONNECTED" zurück, nicht einen bestimmten Telefonie-Typ. – worked

2

Sie können nicht direkt sagen. Sie müssen das zugrundeliegende Betriebssystem fragen. Für OS X können Sie die Ausgabe von "/ sbin/ifconfig" am entsprechenden Netzwerkanschluss analysieren.

1

Sie können auch eine Erweiterung mit JNI schreiben und die Verbindungsgeschwindigkeit mit C anfragen. Dies ist nur dann der Fall, wenn Sie die Ausgabe von anderen Anwendungen nicht analysieren möchten, aber beachten Sie, dass diese Lösung nicht portierbar ist.

Verwandte Themen