监控URL是否在Android中不断联机

时间:2015-09-18 14:52:13

标签: java android url

我想创建一个URL监视器,如果URL在线,它将每隔x秒在后台监视。

ConnectivityManager对我不好,因为我的应用程序在受控环境中使用,虽然互联网正常工作,但某些端口需要关闭。

所以我需要监控foo.com/9000是否一直在线,当我请求isOnline我希望立即得到结果时,所以应该在后台进行监控。

我如何实现这一点,是否有一个库可以做到这一点?

在Actionscript中,我会调用UrlMonitor并将其传递给url

2 个答案:

答案 0 :(得分:1)

你可以用它来重复这个任务: Repeat a task with a time delay?

这是任务:

@{
    var myList = new List<testObj>();
    var list = new JavaScriptSerializer().Serialize(myList);
    // list now contains a JSON string repesentation of myList.
}

<script>
   var options = @Html.Raw(list);
</script>

答案 1 :(得分:0)

private static boolean internetConnectionAvailable;
private static ScheduledExecutorService scheduleTaskExecutor;


public static void stopInternetMonitor() {
    if (scheduleTaskExecutor != null && !scheduleTaskExecutor.isShutdown()) {
        scheduleTaskExecutor.shutdown();
    }
}

public static void startInternetMonitor() {
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            isInternetConnectionAvailableSync();
        }
    };

    if (scheduleTaskExecutor != null) {
        if (scheduleTaskExecutor.isShutdown()) {
            scheduleTaskExecutor.scheduleWithFixedDelay(runnable, 0, 30, TimeUnit.SECONDS);
        }
    } else {
        scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
        scheduleTaskExecutor.scheduleWithFixedDelay(runnable, 0, 30, TimeUnit.SECONDS);
    }
}

public static boolean isInternetConnectionAvailableCached() {

    ConnectivityManager cm = (ConnectivityManager) FashionTrenderApplication.getInstance()
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected() && internetConnectionAvailable) {
        return true;
    }

    return false;
}

public static boolean isInternetConnectionAvailableSync() {
    ConnectivityManager cm = (ConnectivityManager) FashionTrenderApplication.getInstance()
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        try {
            URL url = new URL(EnvironmentConfiguration.getInstance().getServerUrl());
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("User-Agent", "test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1000); // mTimeout is in seconds
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                internetConnectionAvailable = true;
                return true;
            } else {
                internetConnectionAvailable = false;
                return false;
            }
        } catch (IOException e) {
            Log.i("warning", "Error checking internet connection", e);
            return false;
        }
    }

    return false;
}