ネットワークが接続されているときにユーザーに遅いインターネット接続を表示する方法注:ネットワークタイプではありません(2G、3G、4G、WIFI)
ネットワーク速度の決定-(遅いインターネット速度)
NetworkInfoクラス、ConnectivityManager、およびTelephonyManagerを使用して、ネットワークタイプを決定します。
インターネットから任意のファイルをダウンロードして、ファイル内のバイト数とバイト数を計算します。 (速度チェックを決定する唯一の可能な方法)
私は私のプロジェクトのために以下のロジックを試しました、あなたもこれを調べました、それがあなたを助けることを願っています。
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();
このコードを使用するには、モバイルネットワークのインターネット速度を確認してください
ConnectivityManager connectivityManager = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();
このコードを使用するには、wifiネットワークのインターネット速度を確認します
public int getWifiLevel()
{
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
int linkSpeed = wifiManager.getConnectionInfo().getRssi();
int level = WifiManager.calculateSignalLevel(linkSpeed, 5);
return level;
}
そして、詳細はこのリンクを参照してください
https://Android.jlelse.eu/designing-Android-apps-to-handle-slow-network-speed-dedc04119aac
これがお役に立てば幸いです。
ありがとうございました。
UPDATE-非推奨のライブラリ-メンテナンスされなくなりました
元の投稿:
Facebookで Network Connection Class を使用できます。
そのConnectionClassStateChangeListenerにはonBandwidthStateChange
というメソッドがあり、ConnectionQualityクラスのインスタンスを返します。
public interface ConnectionClassStateChangeListener {
public void onBandwidthStateChange(ConnectionQuality bandwidthState);
}
ConnectionQualityクラスは、以下のように定義された列挙型クラスです。
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
}
直接確認することはできません。
ただし、サーバーにpingして、応答に非常に時間がかかるか、まったく応答しないかを確認することもできます。
スピードテストもできます。ただし、ほとんどのアプリケーションでは、これはあまり意味がありません。ユーザーのデータを独占しているためです。
あなたができる最も基本的なことは、たとえば、www.google.com
。リクエストを開始してから完了するまで、リクエストのためにダウンロードしたデータの量を測定することができます。つまり、データ(スペース)と時間を費やしたことになります。スペースを時間で割ると、ネットワークの速度が得られます。これはプローブするURLにも依存するため、多少不正確です。
最小api:21が必要です。 ConnectivityManager
をNetworkCapabilities
と組み合わせて使用して、ダウンストリームとアップストリームの両方の帯域幅を取得します。うまく動作します。 kbps単位の速度に基づいて、速度が2G、3G、または4Gレベルかどうかを決定できます。
ConnectivityManager cm = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();
結局のところ、ユーザーがユーザーのインターネット接続に責任を負わないため、ファイルをダウンロードすることはソリューションを過度に設計することになります。現在のステータスに基づいて情報を提供することは、ほとんどのユースケースで十分です。これにより、操作を実行する前に現在のリンク速度をすばやく確認できます。
Androidはこれを直接許可していません。インターネットの速度を判断するためにファイルをダウンロードしてみてください。以下は接続品質のリストです。
詳細はこの記事で確認できます https://Android.jlelse.eu/designing-Android-apps-to-handle-slow-network-speed-dedc04119aac