也许我的问题标题在stackoverflow上还有其他问题,但是我找不到任何有用的信息,所以我需要任何人帮助解决我的特定问题:我想连续检查Internet连接,因此我创建了一个广播接收器扩展类,它具有侦听器如下:
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);
}
}
在我的活动中:
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;
}
}
});
}
}
在清单中:
<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>
在看到logcat之后,我相信当触发NetworkStateReceiver.onReceiver时,mOnNetworkStateListener始终为null。我不知道错误在哪里?有人可以帮助我解决此问题吗?预先感谢大家。
您需要注册广播接收器。完全FrgChosing:
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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句