Maybe my title of question have some others on stackoverflow, but I can not find any helpful info, so I need anyone help the particular problem of mine: I want to check Internet connection continuously, so I created a broadcast receiver extends class and it has listener as below:
NetworkStateReceiver.java:
public class NetworkStateReceiver extends BroadcastReceiver {
public interface NetworkStateListener {
void onNetChange(int status);
}
private NetworkStateListener mOnNetworkStateListener;
public void setNetworkStateListener(NetworkStateListener listener) {
mOnNetworkStateListener = listener;
}
public void onReceive(Context context, Intent intent) {
int status = NetworkUtil.getConnectivityStatus(context);
if (mOnNetworkStateListener != null)
mOnNetworkStateListener.onNetChange(status);
}
}
in My Activity:
public class FrgChoosing extends Fragment {
private NetworkStateReceiver mNetworkStateCallback;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
initNetworkChecking();
}
private void initNetworkChecking() {
mNetworkStateCallback = new NetworkStateReceiver();
mNetworkStateCallback.setNetworkStateListener(new NetworkStateListener() {
@Override
public void onNetChange(int status) {
// TODO Auto-generated method stub
switch (status) {
case NetworkUtil.TYPE_WIFI:
Functions.toastString("have wifi connection", getActivity());
break;
case NetworkUtil.TYPE_MOBILE:
Functions.toastString("have 3g connection", getActivity());
break;
case NetworkUtil.TYPE_NOT_CONNECTED:
Functions.toastString("no connection", getActivity());
break;
default:
break;
}
}
});
}
}
in Manifest:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...
<receiver android:name=".NetworkStateReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
And after see logcat, I believe mOnNetworkStateListener always null when NetworkStateReceiver.onReceiver is triggered. I don't know where the error? Anyone can help me resolve this problem? Thanks in advance everyone.
You need Register the broadcast receiver. Fully FrgChoosing:
private void initNetworkChecking() {
// TODO Auto-generated method stub
if (!Functions.hasConnection(getActivity())) {
Functions.toastString(getActivity().getResources().getString(R.string.alert_no_internet), getActivity());
}
mNetworkStateCallback = new NetworkStateReceiver();
mNetworkStateCallback.setNetworkStateListener(new NetworkStateListener() {
@Override
public void onNetChange(int status) {
// TODO Auto-generated method stub
switch (status) {
case NetworkUtil.TYPE_WIFI:
Functions.toastString("co mang wifi", getActivity());
break;
case NetworkUtil.TYPE_MOBILE:
Functions.toastString("co mang 3g", getActivity());
break;
case NetworkUtil.TYPE_NOT_CONNECTED:
Functions.toastString("mat mang roi", getActivity());
break;
default:
break;
}
}
});
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
filter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
getActivity().registerReceiver(mNetworkStateCallback, filter);
}