我需要不断检查互联网是否已连接,并用适当的消息相应地更新文本区域。现在,如果我创建一个 asynctask ,它将执行一次并停止,这不是我想要的。我想每时每刻都在检查,显然这不应该在主线程上。所以 Service 也不是一个好选择。谁能帮我什么是最好的和有效的方法来解决这个问题。谢谢
用接收器来做。您可以收到有关网络状态更改的通知。例如,
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()。
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" />