可能重复:
如何在 Android 中监控网络连接状态?
我需要不断检查互联网是否连接,并使用适当的消息相应地更新文本区域。现在,如果我创建一个异步任务,它将执行一次并停止,这不是我想要的。我想随时检查,显然这不应该在主线程上。所以服务也不是一个好的选择。任何人都可以帮助我处理这个问题的最佳和有效方法是什么。谢谢
可能重复:
如何在 Android 中监控网络连接状态?
我需要不断检查互联网是否连接,并使用适当的消息相应地更新文本区域。现在,如果我创建一个异步任务,它将执行一次并停止,这不是我想要的。我想随时检查,显然这不应该在主线程上。所以服务也不是一个好的选择。任何人都可以帮助我处理这个问题的最佳和有效方法是什么。谢谢
用接收器来做。您可以收到有关网络状态更改的通知。例如,
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()
然后CONNECTIVITY_ACTION
在连接更改时使用 BroadcastReceiver 从 ConnectivityManager 侦听 Intent 并检查EXTRA_NO_CONNECTIVITY
.