마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

BroadcastReceiver를 이용한 Wifi 상태 감시

0 추천

receiver 클래스 입니다..

 

package com.example.iswifi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.widget.Toast;

public class ShowWiFiMonitor extends BroadcastReceiver {
	public final static int WIFI_STATE_DISABLED = 0x00;
	public final static int WIFI_STATE_DISABLING = WIFI_STATE_DISABLED + 1;
	public final static int WIFI_STATE_ENABLED = WIFI_STATE_DISABLING + 1;
	public final static int WIFI_STATE_ENABLING = WIFI_STATE_ENABLED + 1;
	public final static int WIFI_STATE_UNKNOWN = WIFI_STATE_ENABLING + 1;
	public final static int NETWORK_STATE_CONNECTED = WIFI_STATE_UNKNOWN + 1;
	public final static int NETWORK_STATE_CONNECTING = NETWORK_STATE_CONNECTED + 1;
	public final static int NETWORK_STATE_DISCONNECTED = NETWORK_STATE_CONNECTING + 1;
	public final static int NETWORK_STATE_DISCONNECTING = NETWORK_STATE_DISCONNECTED + 1;
	public final static int NETWORK_STATE_SUSPENDED = NETWORK_STATE_DISCONNECTING + 1;
	public final static int NETWORK_STATE_UNKNOWN = NETWORK_STATE_SUSPENDED + 1;

	public interface OnChangeNetworkStatusListener {
		public void OnChanged(int status);
	}

	public ShowWiFiMonitor() {
		super();
	}

	private WifiManager wifiManager = null;
	private ConnectivityManager connManager = null;
	private OnChangeNetworkStatusListener onChangeNetworkStatusListener = null;

	public ShowWiFiMonitor(Context context) {
		wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
		connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
	}

	public void setOnChangeNetworkStatusListener(OnChangeNetworkStatusListener listener) {
		onChangeNetworkStatusListener = listener;
	}

	@Override
	public void onReceive(Context context, Intent intent) {
		if (onChangeNetworkStatusListener == null) {
			return;
		}

		String strAction = intent.getAction();
		if (strAction.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
			switch (wifiManager.getWifiState()) {
			case WifiManager.WIFI_STATE_DISABLED:
				onChangeNetworkStatusListener.OnChanged(WIFI_STATE_DISABLED);
				Toast.makeText(context, "WIFI_STATE_DISABLED", Toast.LENGTH_SHORT).show();
				break;
			
.
.
.생략
			case WifiManager.WIFI_STATE_UNKNOWN:
				onChangeNetworkStatusListener.OnChanged(WIFI_STATE_UNKNOWN);
				Toast.makeText(context, "WIFI_STATE_UNKNOWN", Toast.LENGTH_SHORT).show();
				break;
			}
		} .
.
.생략
	}
}

 

 

메인 엑티비티입니다..

 

package com.example.iswifi;

import android.app.Activity;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;


public class MainActivity extends Activity {

	private ShowWiFiMonitor showWifiMonitor = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ShowWiFiMonitor showWiFiMonitor = new ShowWiFiMonitor(this);
		showWiFiMonitor.setOnChangeNetworkStatusListener(SnowChangedListener);
		registerReceiver(showWifiMonitor, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
		registerReceiver(showWifiMonitor, new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
	}
	
		@Override
	protected void onDestroy() {
		super.onDestroy();
		unregisterReceiver(showWifiMonitor);
	}

	ShowWiFiMonitor.OnChangeNetworkStatusListener SnowChangedListener = new ShowWiFiMonitor.OnChangeNetworkStatusListener() {
		@Override
		public void OnChanged(int status) {
			switch (status) {
			case ShowWiFiMonitor.WIFI_STATE_DISABLED:
				Log.i("WIFIMONITOR", "[WifiMonitor] WIFI_STATE_DISABLED");
				break;

			case ShowWiFiMonitor.WIFI_STATE_DISABLING:
				Log.i("WIFIMONITOR", "[WifiMonitor] WIFI_STATE_DISABLING");
				break;

			
.
.
.
.생략
			case ShowWiFiMonitor.NETWORK_STATE_UNKNOWN:
				Log.i("WIFIMONITOR", "[WifiMonitor] WIFI_STATE_DISABLED");
				break;

			}
		}
	};

}

 

 

메니패스트입니다..

 

퍼미션

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

리시버

 

<receiver
            android:name=".ShowWiFiMonitor"
            android:enabled="true"
            android:priority="0" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

 

 

메인 레이아웃은 그냥 helloworld입니다.

 

앱 실행하고 와이파이 상태를 껐다켰다했을 때 로그나 토스트를 띄워 확인을 하려 했으나

 

변화를 주는순간

 

 

05-07 11:27:32.324: E/AndroidRuntime(5372): FATAL EXCEPTION: main
05-07 11:27:32.324: E/AndroidRuntime(5372): java.lang.RuntimeException: Unable to instantiate receiver com.example.iswifi.ShowWiFiMonitor: java.lang.InstantiationException: can't instantiate class com.example.iswifi.ShowWiFiMonitor; no empty constructor
.
.
.
.
.
05-07 11:27:32.324: E/AndroidRuntime(5372): Caused by: java.lang.InstantiationException: can't instantiate class com.example.iswifi.ShowWiFiMonitor; no empty constructor
 
이런 에러로그가 뜨는데요..
 
기본 생성자가 없데서 생성도 해줬고..
 
InstantiationException이 인스턴스를 객체로 생성하려고 해서 생긴 예외라던데
 
그런적도 없고..,
 
뭐가 문제일까요..
윤둥이 (4,560 포인트) 님이 2013년 5월 7일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...