5344


WifiのRSSIを取得したく存じます。  
下記のように記述しましたが、RSSIの値が取得できておりません。  
修正方法をご教示願えませんでしょうか。

[code]

    // 信号強度の取得部分。
    private double getStrength() {
        WifiManager wifi = (WifiManager)getSystemService(WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        String[] apInfo = new String[4];
        int rssi = info .getRssi();
        int level = WifiManager.calculateSignalLevel(rssi, 5);
        apInfo[3] = String.format("RSSI : %d / Level : %d/4", rssi, level);
        return rssi;
    }
    
[/code]


CC BY-SA 3.0
2015-01-26T12:29:08.020
5337
2015-01-26T14:59:32.490
2015-01-26T14:58:14.047
30
7590
question
android
WiFi managerからRSSIの値を取得する方法


戻り値のdoubleをint型に変えて、出力した結果、この値でいいのか分かりませんがマイナス値(-55,
-74...)が取れてました。ホームボタン押下、アプリをクリックを繰り返すと`onResume()`が呼ばれるのでそこでログに出してざっと確認しました。

そこで思ったのですが、AndroidManifest.xmlに次のパーミッションの設定を忘れていませんか。

`<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />`

あるいは、`wifiInfo`の取得にあたって、`Broadcast
Receiver`の設定をしておけば[捗るのかもしれません。](http://android-er.blogspot.jp/2011/01/check-
rssi-by-monitoring-of.html)  
ちなみに、端末のwifiを飛行機モードにすると-127で固定になるので、wifiはONにしないと動かないと存じます。

試しに動かしたソースコードを下に一応置きます。

[code]

    // Sample code.
    
    public class MainActivity extends Activity implements OnClickListener{
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //　手元にあったプロジェクトを使ったので無視して下さい。   
            Button button = new Button(this);
            button.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View arg0) {
            Log.v("tag","Pushed");
    
        }
    
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
    
            Log.e("TAG", Integer.toString(getStrength()));
        }
    
        private int getStrength() {
            WifiManager wifi = (WifiManager)getSystemService(WIFI_SERVICE);
            WifiInfo info = wifi.getConnectionInfo();
            String[] apInfo = new String[4];
            int rssi = info .getRssi();
            int level = WifiManager.calculateSignalLevel(rssi, 5);
            apInfo[3] = String.format("RSSI : %d / Level : %d/4", rssi, level);
            return rssi;
        }   
    }
    
[/code]

追記:  
マイナス値でいいみたいです。  
`Relevant rssi range on android is between -100 and -55`が取得できるそうです。  
<https://stackoverflow.com/questions/13275306/whats-the-meaning-of-rssi-in-
android-wifimanager>

-127の正体は`INVALID_RSSI`でした。  
<https://github.com/android/platform_frameworks_base/blob/59701b9ba5c453e327bc0e6873a9f6ff87a10391/wifi/java/android/net/wifi/WifiConfiguration.java#L403>

以上、勉強させていただきました。


CC BY-SA 3.0
2015-01-26T13:35:04.127
5344
2015-01-26T14:59:32.490
2017-05-23T12:38:56.083
-1
2904
5337
answer