可能重复:
如何监控在Android的网络连接状态?
我需要不断上网查是否连接与否,用适当的信息更新相应的文本区域。 现在,如果我创建的AsyncTask将执行一次并停止这不是我想要的。 我想在每一个时刻不断地检查,显然这不应该是主线程。所以服务不会是一个很好的选择,要么上。 谁能帮我什么是处理这个最好的和有效的方法。 谢谢
可能重复:
如何监控在Android的网络连接状态?
我需要不断上网查是否连接与否,用适当的信息更新相应的文本区域。 现在,如果我创建的AsyncTask将执行一次并停止这不是我想要的。 我想在每一个时刻不断地检查,显然这不应该是主线程。所以服务不会是一个很好的选择,要么上。 谁能帮我什么是处理这个最好的和有效的方法。 谢谢
与接收器做到这一点。 你可以通知有关网络状态的变化。 例如,
private BroadcastReceiver networkReceiver = new BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getExtras()!=null) {
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
// we're connected
}
}
// we're not connected
}
}
在您注册此onResume()
并注销上onPause()
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(networkReceiver);
}
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkReceiver, filter);
}
另外,为了获得初始状态的接收器已被登记之前,在调用此onResume()
方法,
public boolean isNetworkConnected() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
请确保您的应用程序请求该权限,
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
你并不需要不断地问操作系统是否有网络连接。 简单地检查是否存在连接onResume()
然后使用一个BroadcastReceiver来监听CONNECTIVITY_ACTION
从ConnectivityManager意图时更改连接,并检查EXTRA_NO_CONNECTIVITY
。