有效的方法,不断检查网络连接是否可用在Android的[复制](Efficient approach

2019-07-31 21:30发布

可能重复:
如何监控在Android的网络连接状态?

我需要不断上网查是否连接与否,用适当的信息更新相应的文本区域。 现在,如果我创建的AsyncTask将执行一次并停止这不是我想要的。 我想在每一个时刻不断地检查,显然这不应该是主线程。所以服务不会是一个很好的选择,要么上。 谁能帮我什么是处理这个最好的和有效的方法。 谢谢

Answer 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" />


Answer 2:

你并不需要不断地问操作系统是否有网络连接。 简单地检查是否存在连接onResume()然后使用一个BroadcastReceiver来监听CONNECTIVITY_ACTION从ConnectivityManager意图时更改连接,并检查EXTRA_NO_CONNECTIVITY



文章来源: Efficient approach to continuously check whether internet connection is available in Android [duplicate]