私のアプリケーションでは、接続されたネットワーク (wifi/GPRS/3G) の速度を見つける必要があります。ここで、GPRS/3G ネットワークの速度を調べるのに助けが必要です。この問題を解決する方法を教えてください。
4 に答える
TrafficStatsが作業を行います。転送されるバイト数を取得してから、速度を計算できます。
これも完全な答えではありませんが、Wifi ネットワーク (携帯電話ではない) の場合、次のような方法でリンク レートを取得できます。
public String getLinkRate()
{
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
return String.format("%d Mbps", wi.getLinkSpeed());
}
注意すべき点がいくつかあります。
- これには
android.permission.ACCESS_WIFI_STATE
許可が必要になります。 - 常に 802.11 標準で指定されたレートの 1 つになります (こちらの表を参照してください) 。
- ハンドセットと AP が最大レートとしてネゴシエートしたレートのみです。Web サーフィンなどの実際の速度に影響を与える多くの要因が影響します (ワイヤレスの輻輳と衝突、アップストリーム リンク速度など)。
おそらく、ユーザーがwifi、gprs、またはg3ネットワークに接続していることがわかります。次に、各テクノロジーの速度を把握できます。また、ファイル (たとえば 3MB) を高速接続サーバーに置くこともできます。次に、そのファイルをダウンロードして、所要時間を測定できます。次に、計算するだけです...または、ファイルのダウンロード中に1秒ごとに計算できます。
また、ダウンロード速度はさまざまな条件によって異なる場合があります。ネットワーク強度のようなもの (ブース ワイヤレスとモバイル)。たとえば、ユーザーが 54 メガビットの Wi-Fi に接続していて、アクセス ポイントがユーザーから 60 メートル離れている場合、ダウンロード速度はその半分にもなりません。これは、ダウンロード速度の計算の例ですjava howto calculate Mbit/s during while loop download
Zwitscher の NetworkHelper クラスを見てください。
基本的に取得が必要ですConnectivityManager
cManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
そして、知りたいことをこれに問い合わせます
NetworkInfo info = cManager.getActiveNetworkInfo();
int type = info.getType();
int subType = info.getSubtype();
詳細については、上記のクラスを参照して、 と の意味を確認してtype
くださいsubType
。