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