我的服务器不断检查我的Android应用程序是否在线。请问我在Android应用程序上可以做什么方法
答案 0 :(得分:18)
创建一个名为isNetworkAvailable()的辅助方法,该方法将返回true或false,具体取决于网络是否可用。它看起来像这样
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" />
编辑:上述方法仅检查网络是否可用。它不会检查设备是否可以实际连接到互联网。检查是否存在Internet连接的最佳方法是尝试使用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或类似的东西。
答案 1 :(得分:0)
public boolean isOnline() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnectedOrConnecting()){
return true;
}
else{
return false
}
}