Wie programmgesteuerte Verbindungsgeschwindigkeit erhalten?

8

Ich arbeite an einer App und sie ist fast fertig, außer nur eines: Ich weiß nicht, wie ich die Verbindungsgeschwindigkeit erreichen und in die Statusleiste setzen kann. Ich bin neu in Java, also könnte mir jemand helfen sei sehr dankbar. P.S. Sorry für schlecht Englisch.

    
4yBAk 13.12.2010, 14:07
quelle

3 Antworten

34

Wie die Replikatoren vorschlagen, ist Ihre Frage nicht sehr klar. Sie können sich auf die Link-Verbindungsgeschwindigkeit beziehen (d. H. Bis zu 54 Mbps bei gutem Signalempfang Wifi oder bis zu 7,2 Mbps bei voller Geschwindigkeit HSDPA), die abhängig ist von:

  • Die Netzwerkschnittstelle, die Sie gleichzeitig verwenden . 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 Wifi-Verbindung abbricht, schaltet Ihr Telefon bei Aktivierung automatisch auf Mobiles Netzwerk um).
  • Die Verbindungsgeschwindigkeit gleichzeitig 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 befürchte ich, dass es keine Standard-Java-API-Methoden gibt, um sie zu kennen, sondern die Android-API die benötigte Funktionalität:

  • Für die Überprüfung der WLAN-Verbindungsgeschwindigkeit WifiInfo.getLinkSpeed ​​()
  • Für den mobilen Datenlink Ich befürchte, dass Sie nur TelefonyManager.getNetworkType überprüfen können () um den aktuellen Mobile Data Link Typ zu bestimmen. 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 beziehen, ist diese nur auf einer hohen Ebene verfügbar. Dabei wird nicht die Verbindungsgeschwindigkeit, sondern die Geschwindigkeit zwischen Ihrem Telefon und a Server, der nicht nur durch Ihre Verbindungsgeschwindigkeit, sondern auch durch viele andere Faktoren (alle Verbindungen zwischen Ihrem Telefon und einem Server, dem Server selbst usw.) bestimmt werden kann. Sie könnten einfach die "HTTP-Level-Geschwindigkeit" messen, dh die HTTP-Datenrate (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 die 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).

    
Fernando Miguélez 13.12.2010, 15:20
quelle
2

Sie können es 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.

    
quelle
1

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

    
Marcin 13.12.2010 14:30
quelle

Tags und Links