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이 인스턴스를 객체로 생성하려고 해서 생긴 예외라던데
그런적도 없고..,
뭐가 문제일까요..