프로젝트를 진행하면서 계획중에 연결중인 Wifi AP 범위를 벗어나면 자동으로 앱을 종료시켜주는 사항이 있었다.
처음에는 이 부분을 제공하기 위해서 Service를 BackGround에 등록한 후 매번 Wifi모듈의 상태를 확인하는 쓰레드 루틴을 작성하였다. 그러나 앱이 비정상 종료 되었을 때 서비스에서 생성된 Thread를 종료시킬 방법이 없어서 계속해서 Notification을 하는 좀비앱이 되는 문제가 발생하였다. 그래서 더 나은 방법을 찾던 중 BroadCastReceiver라는 정보를 얻게되었다.
BroadcastReceiver를 사용하기 위해서는 BroadcastReceiver를 상속받아야 한다.
...(여러 잡다한 부분은 중략)...
그 후 Broadcastreceiver를 상속받은 클래스의 onReceive매서드에서
public void onReceive(Context context, Intent intent)
{
if (m_OnChangeNetworkStatusListener == null)
{
return;
}
String strAction = intent.getAction();
NetworkInfo networkInfo = m_ConnManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (strAction.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
if (networkInfo.getState() == NetworkInfo.State.CONNECTED)
{
m_OnChangeNetworkStatusListener.OnChanged(NETWORK_STATE_CONNECTED);
}
else if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED)
{
m_OnChangeNetworkStatusListener.OnChanged(NETWORK_STATE_DISCONNECTED);
}
}
}
와 같이 WifiManager의 NETWORK_STATE_CHANGED_ACTION 의 변화를 확인하면된다.
사용하고자 하는 Activity에서는 아래와같이 리시버를 등록한다. (WifiMonitor는 BroadcastReceiver를 상속받은 클래스이다)
WifiMonitor mWifiMonitor = new WifiMonitor(this);
IntentFilter receiverFilter = new IntentFilter();
receiverFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
receiverFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(mWifiMonitor, receiverFilter);
리시버 클래스를 생성한 후 BroadcastReceiver를 사용하기위한 IntentFilter를 설정해준 후 registerReceiver(리시버클래스, 필터); 매서드를 이용해서 등록한다.
동작은 아래와 같고 리시버 클래스 첨부
(Wifi가 연결되면서 Connecting -> connected 순으로 토스트가 출력되는 모습)
'소프트웨어 > Android/Java/Ndk' 카테고리의 다른 글
java] ArrayList와 Hashmap검색속도관련 (1) | 2013.12.12 |
---|---|
Android] LiswView의 성능향상을 위한 HolderPattern (0) | 2013.12.06 |
Android] unable to add window token null is not for an application 이슈 (0) | 2013.11.28 |
Android] ArrayList복사시 (깊은복사와 얕은복사) (1) | 2013.11.09 |
Android] APP을 종료하지 않고 HOME으로 빠지기 (1) | 2013.11.09 |
Android] WifiManager를 이용해서 앱 탈출시 Wifi 꺼버리기 (0) | 2013.11.09 |
ANDROID] Back Key 두번눌러서 끄기 (0) | 2013.11.09 |