如何检查Android设备是否在线

时间:2015-05-20 07:27:41

标签: android

我的服务器不断检查我的Android应用程序是否在线。请问我在Android应用程序上可以做什么方法

2 个答案:

答案 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
    }
 }