一尘不染

不断检查Android中是否可用互联网连接的有效方法

java

我需要不断检查互联网是否已连接,并用适当的消息相应地更新文本区域。现在,如果我创建一个 asynctask
,它将执行一次并停止,这不是我想要的。我想每时每刻都在检查,显然这不应该在主线程上。所以 Service
也不是一个好选择。谁能帮我什么是最好的和有效的方法来解决这个问题。谢谢


阅读 263

收藏
2020-12-03

共1个答案

一尘不染

用接收器来做。您可以收到有关网络状态更改的通知。例如,

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" />
2020-12-03