如何检查我的android设备是否有连接?
无论用户是否有活跃的互联网连接(通过活动,我的意思是用户可以打开任何网络URl),下面所述情况下的最佳解决方案是什么。如何检查我的android设备是否有连接?
- 通过使http请求到google.com并检查respose代码,或
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204") .openConnection()); urlc.setRequestProperty("User-Agent", "Android"); urlc.setRequestProperty("Connection", "close"); urlc.connect(); Log.d("reqcode",""+urlc.getResponseCode()); return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
- 通过向服务器发出请求我正在使用。
哪个在性能方面最好。
我使用下面的方法来检查用户是否通过移动数据或wi-fi有活动的互联网连接。
public static boolean isInternetConnected() {
ConnectivityManager connectivityManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
并在清单文件中添加权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
有没有办法来确定用户是否具有有效连接或没有。如果用户没有活动连接并在一段时间后抛出
SocketTimeOutException
,则在您的问题中建议的方法会导致您进入漫长的等待期。
所以,如果你想检查用户是否有互联网连接,那么只检查它已启用Wi-Fi和/或数据连接,并假设数据包打开。
不工作,我想知道如果设备有一个活动的连接(不只是连接到无线网络)我已经实施它,它总是会返回true,除非我的wifi关闭。 –
@AmanVerma检查我更新的答案。 –
是的,这是事情,我用我的问题中所述的方法,我必须等待约20秒才能得到响应代码。虽然有另一种使用套接字的方法,但它速度很快,但在许多设备上无法工作。 Android设备使用提到的代码来检查活动连接 –
请勿ping网站以检查互联网连接。这是一个非常糟糕的做法,因为该网站可能会永久*您的应用,或者只是一台服务器可能关闭。
改为使用BroadCastReceiver来收听互联网连接Intent
。从BradcastReceiver
和你onReceive
使用
private boolean isConnectedToInternet(){
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
内扩展您的类来检查连接状态。
您可能还需要注册和注销的接收器在Activity
的onResume()
和onPause()
法
registerReceiver(networkChangeListener, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
...
unregisterReceiver(networkChangeListener);
使用这样的方法:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
然后,只需:
if(isNetworkAvailable()) {
//Do what you want with internet
} else {
//Do something wothout internet
}
您还需要在您的清单文件:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
总之:Question
可能是最好看的Android文档张贴在这里了。[确定和监控连接状态](https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html) –
[如何检查Android上的互联网访问? InetAddress永不超时](http://*.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-times-out) –