개발 이야기/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 아래인 경우에 신호 세기가 너무 낮아 원활한 네트워크 환경이 아니라고 판단하면
될 것 같습니다.
더 깊게 들어가신다면,,, 열심히 구글링을,,,
전 간단한 예제 소개 정도로만!