8

を使用して現在のwifi接続の信号強度を取得しようとしていますgetRssi()

private void checkWifi(){
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo Info = cm.getActiveNetworkInfo();
    if (Info == null || !Info.isConnectedOrConnecting()) {
        Log.i("WIFI CONNECTION", "No connection");
    } else {
        int netType = Info.getType();
        int netSubtype = Info.getSubtype();

        if (netType == ConnectivityManager.TYPE_WIFI) {
            wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            int linkSpeed = wifiManager.getConnectionInfo().getLinkSpeed();
            int rssi = wifiManager.getConnectionInfo().getRssi();
            Log.i("WIFI CONNECTION", "Wifi connection speed: "+linkSpeed + " rssi: "+rssi);


        //Need to get wifi strength
        } 
    }
}

事は私が-35または-47などのような数字を取得することです..そして私はそれらの値を理解していません..私はアンドロイドのドキュメントとそれが述べているすべてを見てきました:

public int getRssi()

以来:APIレベル1現在の802.11ネットワークの受信信号強度インジケータを返します。

これは正規化されていませんが、正規化する必要があります。

範囲内のRSSIを返します??? に ???

誰かがこれらの結果を「正規化」または理解する方法を説明できますか?

4

4 に答える 4

13

私はこれをWifiManager.javaで見つけました:

/** Anything worse than or equal to this will show 0 bars. */
private static final int MIN_RSSI = -100;

/** Anything better than or equal to this will show the max bars. */
private static final int MAX_RSSI = -55;

androidの関連するrssi範囲は、-100から-55の間です。

この静的メソッドWifiManager.calculateSignalLevel(rssi、numLevel)があり、シグナルレベルを計算します。

int wifiLevel = WifiManager.calculateSignalLevel(rssi,5);

0から4までの数値(つまり、numLevel-1)を返します:ツールバーに表示されるバーの数。

EDIT API 30+

静的メソッドは非推奨になり、インスタンスメソッドを使用する必要があります

wifiManager.calculateSignalLevel(rssi)

主な違いは、レベルの数が次のように与えられることです。wifiManager.getMaxSignalLevel()

于 2012-12-05T10:58:48.057 に答える
7

IEEE 802.11のドキュメントによると:負の値が小さいほど、信号強度が高くなります。

範囲は-100〜0 dBmで、0に近いほど強度が高くなり、その逆も同様です。

于 2012-11-07T17:55:25.213 に答える
0

ウィキペディアから:

ベンダーは、実際の電力(mWまたはdBmとして測定)およびRSSI値の範囲(0からRSSI_Maxまで)について、独自の精度、粒度、範囲を提供します。

例として、Cisco SystemsカードのRSSI_Max値は100で、101の異なる電力レベルを報告します。RSSI値は0〜100です。もう1つの人気のあるWi-FiチップセットはAtherosによって製造されています。Atherosベースのカードは0から127(0x7f)のRSSI値を返し、128(0x80)は無効な値を示します。

したがって、これは機器に強く依存します。

于 2012-11-07T18:02:28.970 に答える
0

ben75の回答から始めて、このメソッドを使用してrssiを正規化できます。

public static int normalizeRssi(int rssi){
  // Anything worse than or equal to this will show 0 bars
  final int MIN_RSSI = -100;
  // Anything better than or equal to this will show the max bars.
  final int MAX_RSSI = -55;

  int range = MAX_RSSI - MIN_RSSI;
  return 100 - ((MAX_RSSI - rssi) * 100 / range);
}
于 2013-05-09T08:04:00.563 に答える