Java 一种高效的方法,可以持续检查Android中是否存在互联网连接

Java 一种高效的方法,可以持续检查Android中是否存在互联网连接,java,android,service,android-asynctask,Java,Android,Service,Android Asynctask,可能重复: 我需要不断检查互联网是否已连接,并相应地用适当的消息更新文本区域。现在,如果我创建一个asynctask,它将执行一次并停止,这不是我想要的。我想随时持续检查,显然这不应该出现在主线程上。因此服务也不是一个好选择。有谁能帮我找到处理这个问题的最佳和有效的方法吗。谢谢您无需经常询问操作系统是否有网络连接。只需检查onResume()中是否存在连接,然后在连接更改时使用BroadcastReceiver侦听ConnectionManager的意图并进行检查。使用接收器执行此操作。您可以

可能重复:


我需要不断检查互联网是否已连接,并相应地用适当的消息更新文本区域。现在,如果我创建一个asynctask,它将执行一次并停止,这不是我想要的。我想随时持续检查,显然这不应该出现在主线程上。因此服务也不是一个好选择。有谁能帮我找到处理这个问题的最佳和有效的方法吗。谢谢

您无需经常询问操作系统是否有网络连接。只需检查
onResume()
中是否存在连接,然后在连接更改时使用BroadcastReceiver侦听ConnectionManager的意图并进行检查。

使用接收器执行此操作。您可以收到有关网络状态更改的通知。比如说,

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()方法中调用此函数

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


当我打开和关闭wifi时,广播接收器不工作。Onresume代码工作正常,但广播接收器未通知我任何更改。有什么帮助吗?我刚刚搞错了谢谢@jeffrey hey我使用您的代码检查internet连接。但是orResume()方法中出现错误。。注册接收者(网络接收者);在此方法中,registerReceiver请求2个参数。1表示广播接收器对象,@表示意图过滤器。我为什么不考2级呢?回答得很好!但我不需要
isNetworkConnected()
方法,因为
registerReceiver
总是在第一次注册时触发
onReceive()
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />