我的服务器不断检查我的安卓应用是否在线。请问我可以在我的安卓应用上采取哪些方式?
我的服务器不断检查我的安卓应用是否在线。请问我可以在我的安卓应用上采取哪些方式?
private boolean isNetworkAvailable() {
ConnectivityManager manager =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = false;
if (networkInfo != null && networkInfo.isConnected()) {
// Network is present and connected
isAvailable = true;
}
return isAvailable;
}
不要忘记将以下权限添加到您的清单文件中。<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
编辑:上述方法只检查网络是否可用,而不检查设备是否能够实际连接到互联网。检查是否存在互联网连接的最佳方式是尝试使用HTTP连接到某个已知服务器。
public static boolean checkActiveInternetConnection() {
if (isNetworkAvailable()) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error: ", e);
}
} else {
Log.d(LOG_TAG, "No network present");
}
return false;
}
顺便提一下,注意不要在主线程上运行上述方法,否则它会抛出NetworkOnMainThreadException异常。请使用AsyncTask或等效方法。
https
而不是 http
,否则它将无法工作。 - Saurabh Padwekarpublic boolean isOnline() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnectedOrConnecting()){
return true;
}
else{
return false
}
}