2016-08-08 67 views
7

bestimmen In meiner Anwendung möchte ich, dass wenn ich auf eine Schaltfläche klicken Sie zeigen mir die genaue Internet-Geschwindigkeit. Ich hatte alle Antworten zu dieser Frage gelesen, die bereits in diesen Links determining internet speed in android, Calculating Internet Speed in android, Internet Speed in android programming und so weiter gefragt wurden. Aber ich habe meine Antwort nicht genau gefunden. Früher habe ich dies:Wie kann ich Internet-Geschwindigkeit in meiner Android-Anwendung

WifiInfo.getLinkSpeed ​​()

aber die maximale Geschwindigkeit zeigen. und ich verwende auch die Codes dafür:

TrafficStats

aber es hat nicht für mich gearbeitet. Ich muss meine Netzwerkgeschwindigkeit (d. h. 100 kbps) anzeigen. Wie kann ich das machen? Bitte helfen Sie mir.

Antwort

3

Um Internet-Geschwindigkeit in einer Android-Anwendung zuerst zu bestimmen, müssen Sie einige Datei vom Onlineserver herunterladen. Warum müssen wir die Datei herunterladen? um den Durchschnitt der Internet-Download-Geschwindigkeit zu überprüfen.

für das Sie diese

private class InternetSpeedTest 
     extends AsyncTask<String, Void, String> { 

    long startTime; 
    long endTime; 
    private long takenTime; 

    @Override 
    protected String doInBackground(String... paramVarArgs) { 

     startTime = System.currentTimeMillis(); 
     Log.d(TAG, "doInBackground: StartTime" + startTime); 

     Bitmap bmp = null; 
     try { 
      URL ulrn = new URL(paramVarArgs[0]); 
      HttpURLConnection con = (HttpURLConnection) ulrn.openConnection(); 
      InputStream is = con.getInputStream(); 
      bmp = BitmapFactory.decodeStream(is); 

      Bitmap bitmap = bmp; 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 99, stream); 
      byte[] imageInByte = stream.toByteArray(); 
      long lengthbmp = imageInByte.length; 

      if (null != bmp) { 
       endTime = System.currentTimeMillis(); 
       Log.d(TAG, "doInBackground: EndTIme" + endTime); 
       return lengthbmp + ""; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 

    } 

    protected void onPostExecute(String result) { 

     if (result != null) { 
      long dataSize = Integer.parseInt(result)/1024; 
      takenTime = endTime - startTime; 
      double s = (double) takenTime/1000; 
      double speed = dataSize/s; 
      Log.d(TAG, "onPostExecute: " + "" + new DecimalFormat("##.##").format(speed) + "kb/second"); 
     } 
    } 

In diesem Code codieren, müssen ein Bild herunterladen von Here

In doInBackground Sie die Größe des Bildes berechnen werden nach dem Download hier abgeschlossen

Bitmap bitmap = bmp; 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 99, stream); 
     byte[] imageInByte = stream.toByteArray(); 
     long lengthbmp = imageInByte.length 

und die letzte Sache ist die Berechnung von utzedTime durch Subtrahieren Endzeitformular Startzeit und die Geschwindigkeit ist (Größe/takeTime)Ich hoffe, es funktioniert für Sie

+1

es funktioniert für mich danke –

+1

sein was ich suchte danke viel –

0

WifiInfo.getLinkSpeed ​​gibt Ihnen die maximale Geschwindigkeit Ihres aktuellen WLAN-Netzwerks. Ihre tatsächliche WLAN-Geschwindigkeit wird unter diesem Wert liegen, abhängig davon, wie weit Sie zum Access Point sind, Hindernisse, Interferenzen, ... Dies ist Ihre Geschwindigkeit in Ihrem WLAN-Netzwerk. Wenn Sie auf ein Gerät innerhalb Ihres Netzwerks zugreifen, ist die Übertragung der Mindestwert zwischen Ihrer Geschwindigkeit und der anderen Gerätegeschwindigkeit.

Wenn Sie auf das Internet zugreifen, dann ist Ihr WiFi-Netzwerk mit dem Internet verbunden und Ihre Geschwindigkeit hängt von der verwendeten Technologie (ADSL, Kabel, 4G, Satellit, ...) und der Kapazität Ihres Internetanbieters ab auf der anderen Seite Ihrer Verbindung). Beide Werte ändern sich normalerweise mit der Zeit, da sie von den Nutzungsmustern abhängen (Anzahl der gleichzeitigen Benutzer, Netzwerkkapazität, ..)

Denken Sie auch daran, dass Sie, wenn Sie mit dem Internet verbunden sind, Anfragen an ein anderes Gerät stellen (meistens zu einem Server). Die Übertragungsgeschwindigkeit, die Sie erhalten, ist das Minimum zwischen Ihrer Geschwindigkeit & diejenige für den Server, den Sie kontaktieren.

Alles in allem gibt es zu viele unbekannte Elemente, um Ihre Internetgeschwindigkeit vorherzusagen.

Aber Sie können es immer berechnen, machen Sie einfach einige Anfragen, messen Sie, wie viele KB (oder Megabytes) Sie erhalten, berechnen Sie, wie lange es gedauert hat, und teilen Sie eins durch das andere. Dies ist Ihre aktuelle Geschwindigkeit für diese bestimmte Verbindung.

Wenn Sie stabilere/vertrauenswürdigere Werte wünschen, sollten Sie diese Operation mehrmals wiederholen und den Durchschnittswert verwenden. Das machen Speedtester (www.speedtest.net, testmy.net, ...).

+0

Vielen Dank. Aber kannst du mir sagen, wie ich Anfragen stellen und messen kann, wie viele KByte ich bekomme, wie ich die Zeit berechnen kann? wie kann ich das machen? Könntest du mir bitte mit Code helfen? –

0

Um die Qualität der Internet-Verbindung Qualität und Verkehr zu überprüfen. Diese Bibliothek könnte Ihnen helfen ..

Facebook - Network Connection Class

Network Connection-Klasse ist eine Android-Bibliothek, die Sie die Qualität des aktuellen Benutzers Internet-Verbindung, um herauszufinden, ermöglicht. Die Verbindung wird in mehrere "Verbindungsklassen" eingeteilt, die die Entwicklung erleichtern. Die Bibliothek führt dies durch, indem sie den vorhandenen Internetverkehr Ihrer App abhört und Sie benachrichtigt, wenn sich die Verbindungsqualität des Benutzers ändert. Entwickler können dann diese Informationen zur Verbindungsklasse verwenden und das Verhalten der Anwendung anpassen (fordern Sie Bilder oder Videos mit niedrigerer Qualität, Drosselklappen-Typ usw. an).

+0

danke lieber, aber könntest du mir helfen, wie kann ich diese Bibliothek benutzen? Wenn es möglich ist, zeige es mir bitte im Code. –

+0

Bitte besuchen Sie die github-Seite, folgen Sie den Anweisungen auf dieser Seite. Um die Bibliothek einzuschließen, müssen Sie diese Zeile in Ihrer Gradle-Abhängigkeit zu Ihrer App hinzufügen.'compile 'com.facebook.network.connectionclass: connectionclass: 1.0.1''. – Sathiamour