pythonforandroid/bootstraps/webview/build/templates/WebViewLoader.tmpl.java
package org.kivy.android;

import android.util.Log;

import java.io.IOException;
import java.net.Socket;
import java.net.InetSocketAddress;

import android.os.SystemClock;

import android.os.Handler;

import org.kivy.android.PythonActivity;

public class WebViewLoader {
    private static final String TAG = "WebViewLoader";

    public static void testConnection() {

        while (true) {
            if (WebViewLoader.pingHost("localhost", {{ args.port }}, 100)) {
                Log.v(TAG, "Successfully pinged localhost:{{ args.port }}");
                Handler mainHandler = new Handler(PythonActivity.mActivity.getMainLooper());
                Runnable myRunnable = new Runnable() {
                        @Override
                        public void run() {
                            PythonActivity.mActivity.loadUrl("http://127.0.0.1:{{ args.port }}/");
                            Log.v(TAG, "Loaded webserver in webview");
                        }
                    };
                mainHandler.post(myRunnable);
                break;

            } else {
                Log.v(TAG, "Could not ping localhost:{{ args.port }}");
                try {
                    Thread.sleep(100);
                } catch(InterruptedException e) {
                    Log.v(TAG, "InterruptedException occurred when sleeping");
                }
            }
        }
    }

    public static boolean pingHost(String host, int port, int timeout) {
        Socket socket = new Socket();
        try {
            socket.connect(new InetSocketAddress(host, port), timeout);
            socket.close();
            return true;
        } catch (IOException e) {
            try {socket.close();} catch (IOException f) {return false;}
            return false; // Either timeout or unreachable or failed DNS lookup.
        }
    }
}
