web-dev-qa-db-fra.com

Android: comment déterminer la vitesse du réseau dans Android par programme

Comment afficher une connexion Internet lente à l'utilisateur lorsque le réseau est connecté Remarque: Pas un type de réseau (2G, 3G, 4G, WIFI)

8
Mind_Control

Détermination de la vitesse de votre réseau - (Vitesse Internet lente)

Utilisation de la classe NetworkInfo, ConnectivityManager et TelephonyManager pour déterminer votre type de réseau.

Téléchargez n'importe quel fichier sur Internet et calculez combien de temps cela a pris par rapport au nombre d'octets dans le fichier. (Seul moyen possible de déterminer la vérification de la vitesse)

J'ai essayé la logique ci-dessous pour mes projets, vous avez également examiné cela, J'espère que cela vous aidera.

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    //should check null because in airplane mode it will be null
    NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
    int downSpeed = nc.getLinkDownstreamBandwidthKbps();
    int upSpeed = nc.getLinkUpstreamBandwidthKbps();
6
Lazy Teddy

Vérifiez la vitesse Internet pour le réseau mobile pour utiliser ce code

ConnectivityManager connectivityManager = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();

Si vérifiez la vitesse Internet pour le réseau wifi pour utiliser ce code

public int getWifiLevel()
{
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    int linkSpeed = wifiManager.getConnectionInfo().getRssi();
    int level = WifiManager.calculateSignalLevel(linkSpeed, 5);
    return level;
}

Et plus de détails référez-vous à ce lien

https://Android.jlelse.eu/designing-Android-apps-to-handle-slow-network-speed-dedc04119aac

J'espère que cela pourra vous aider!

Merci.

5
Hardik Talaviya

MISE À JOUR - BIBLIOTHÈQUE DÉCONSEILLÉE - n'est plus maintenue

message d'origine:

Vous pouvez utiliser Classe de connexion résea par Facebook.

Son ConnectionClassStateChangeListener possède une méthode appelée onBandwidthStateChange qui renvoie une instance de la classe ConnectionQuality :

public interface ConnectionClassStateChangeListener {
  public void onBandwidthStateChange(ConnectionQuality bandwidthState);
}

La classe ConnectionQuality est une classe enum définie comme suit:

public enum ConnectionQuality {
  /**
   * Bandwidth under 150 kbps.
   */
  POOR,
  /**
   * Bandwidth between 150 and 550 kbps.
   */
  MODERATE,
  /**
   * Bandwidth between 550 and 2000 kbps.
   */
  GOOD,
  /**
   * EXCELLENT - Bandwidth over 2000 kbps.
   */
  EXCELLENT,
  /**
   * Placeholder for unknown bandwidth. This is the initial value and will stay at this value
   * if a bandwidth cannot be accurately found.
   */
  UNKNOWN
}
2
Nicola Gallazzi

Vous ne pouvez pas le vérifier directement.

Cependant, vous pouvez soit envoyer une requête ping à un serveur et voir si la réponse prend très longtemps ou ne revient pas du tout.

Vous pouvez également faire un speedtest. Dans la plupart des applications, cela n'aurait cependant pas beaucoup de sens, car il s'agit d'un porc sur les données de l'utilisateur.

0
jalako

La chose la plus élémentaire que vous pouvez faire est de sonder une URL dont la disponibilité est presque à 100%, disons, www.google.com. Entre le moment où vous lancez la demande et le moment où elle est terminée, vous pouvez simplement mesurer la quantité de données que vous avez téléchargées pour la demande. Vous avez donc les données (espace) et le temps passé. Divisez simplement l'espace par le temps pour obtenir la vitesse du réseau. C'est quelque peu imprécis, car cela dépend également de l'URL que vous sondez.

0
FonzTech

Api minimum requis: 21. J'utilise ConnectivityManager combiné avec NetworkCapabilities pour obtenir à la fois la bande passante en aval et en amont. Fonctionne très bien. Vous pouvez décider si la vitesse est de niveau 2G, 3G ou 4G en fonction de la vitesse en kbps.

ConnectivityManager cm = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();
  • GSM 2G ~ 14,4 Kbps
  • G GPRS ~ 26,8 Kbps
  • E Edge ~ 108,8 Kbps
  • 3G UMTS ~ 128 Kbps
  • H HSPA ~ 3,6 Mbps
  • H + HSPA + ~ 14,4 Mbps-23,0 Mbps
  • 4G LTE ~ 50 Mbps
  • 4G LTE-A ~ 500 Mbps

Le téléchargement d'un fichier est une ingénierie excessive de la solution car après tout, vous n'êtes pas responsable de la connexion Internet des utilisateurs - ils le sont (ou plutôt leur fournisseur de services)! Leur donner des informations en fonction de leur statut actuel est plus que suffisant pour la plupart des cas d'utilisation. Cela vous permet de vérifier rapidement la vitesse de liaison actuelle avant d'effectuer des opérations.

0
kkarakk

Il semble que Android ne permet pas cela directement. Vous pouvez essayer de télécharger un fichier pour déterminer la vitesse de votre Internet. Voici la liste des qualités de connexion:

  • PAUVRE // Bande passante inférieure à 150 kbps.
  • MODÉRÉ // Bande passante entre 150 et 550 kbps.
  • BON // Bande passante supérieure à 2000 kbps.
  • EXCELLENT // Bande passante supérieure à 2000 kbps.
  • INCONNU // la qualité de la connexion est introuvable.

Vous pouvez vérifier les détails dans cet article https://Android.jlelse.eu/designing-Android-apps-to-handle-slow-network-speed-dedc04119aac

0
Sovandara LENG