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)
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();
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.
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
}
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.
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.
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();
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.
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:
Vous pouvez vérifier les détails dans cet article https://Android.jlelse.eu/designing-Android-apps-to-handle-slow-network-speed-dedc04119aac