web-dev-qa-db-ja.com

Android:Androidプログラムでネットワーク速度を決定する方法

ネットワークが接続されているときにユーザーに遅いインターネット接続を表示する方法注:ネットワークタイプではありません(2G、3G、4G、WIFI)

8
Mind_Control

ネットワーク速度の決定-(遅いインターネット速度)

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();
6
Lazy Teddy

このコードを使用するには、モバイルネットワークのインターネット速度を確認してください

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

これがお役に立てば幸いです。

ありがとうございました。

5
Hardik Talaviya

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
}
2
Nicola Gallazzi

直接確認することはできません。

ただし、サーバーにpingして、応答に非常に時間がかかるか、まったく応答しないかを確認することもできます。

スピードテストもできます。ただし、ほとんどのアプリケーションでは、これはあまり意味がありません。ユーザーのデータを独占しているためです。

0
jalako

あなたができる最も基本的なことは、たとえば、www.google.com。リクエストを開始してから完了するまで、リクエストのためにダウンロードしたデータの量を測定することができます。つまり、データ(スペース)と時間を費やしたことになります。スペースを時間で割ると、ネットワークの速度が得られます。これはプローブするURLにも依存するため、多少不正確です。

0
FonzTech

最小api:21が必要です。 ConnectivityManagerNetworkCapabilitiesと組み合わせて使用​​して、ダウンストリームとアップストリームの両方の帯域幅を取得します。うまく動作します。 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();
  • 2G GSM〜14.4 Kbps
  • G GPRS〜26.8 Kbps
  • Eエッジ〜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

結局のところ、ユーザーがユーザーのインターネット接続に責任を負わないため、ファイルをダウンロードすることはソリューションを過度に設計することになります。現在のステータスに基づいて情報を提供することは、ほとんどのユースケースで十分です。これにより、操作を実行する前に現在のリンク速度をすばやく確認できます。

0
kkarakk

Androidはこれを直接許可していません。インターネットの速度を判断するためにファイルをダウンロードしてみてください。以下は接続品質のリストです。

  • 悪い// 150 kbps未満の帯域幅。
  • 中程度// 150〜550 kbpsの帯域幅。
  • 良い// 2000 kbpsを超える帯域幅。
  • EXCELLENT // 2000 kbpsを超える帯域幅。
  • UNKNOWN //接続品質が見つかりません。

詳細はこの記事で確認できます https://Android.jlelse.eu/designing-Android-apps-to-handle-slow-network-speed-dedc04119aac

0
Sovandara LENG