개발 이야기/Android

BroadcastReceiver Wifi 상태 및 신호 세기 변화 감지

디베로 2017. 6. 20. 15:08

Wifi 상태값 및 신호 세기 변화를 감지하는 리시버를 알아보자.



우선... 리시버를 등록해야겠지요?


WifiManager.SUPPLICANT_STATE_CHANGED_ACTION : 상태 변화

WifiManager.RSSI_CHANGED_ACTION : 세기 변화


이렇게 두 가지 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void initFilters()
{
    IntentFilter filter = new IntentFilter();
 
    filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
    filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
 
    registerReceiver(mFilterListener, filter);
}
 
private void unInitFilters()
{
    try{
        unregisterReceiver(mWifiScanFilterListener);
    }catch(IllegalArgumentException e){
 
    }
}
 
 
cs




이제... 처리하는 부분을 볼까요?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    private BroadcastReceiver mFilterListener = new BroadcastReceiver() {
 
        @Override
        public void onReceive(Context context, Intent intent) {
 
 
            switch (intent.getAction()){
 
                case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
                    SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
                    Log.e(TAG, "SUPPLICANT_STATE_CHANGED_ACTION = " + state);                 
                    break;
 
                case WifiManager.RSSI_CHANGED_ACTION:
                    if(!SystemUtil.isEnableWiFi(mContext))
                        return;
 
                    WifiManager wifiMng = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
                    WifiInfo info = wifiMng.getConnectionInfo();
 
                    int nWifiRSSI = info.getRssi();
                    Log.e(TAG, "wifi power = " + nWifiRSSI);
                    break;
 
                default:
                    break;
            }
 
        }
    };
cs


SupplicantState 값이 COMPLETE 되더라도, 실제 완료된 건 아닌 것 같습니다.

저 로그가 찍히고 몇 초간의 오차가 생기더군요


nWifiRSSI 값이 -85 아래인 경우에 신호 세기가 너무 낮아 원활한 네트워크 환경이 아니라고 판단하면

될 것 같습니다.


더 깊게 들어가신다면,,, 열심히 구글링을,,,

전 간단한 예제 소개 정도로만!