Native code calling JS in Android webapps

前端 未结 1 1952
广开言路
广开言路 2021-02-01 11:29

I am writing an Android \"web\" app (I will not upload the APP to the web, but set the HTML+JS inside the application resources). That means, the GUI will be HTML5, and I will u

1条回答
  •  一整个雨季
    2021-02-01 12:06

    Yes, Android rocks at this actually.

    I'm posting example code from a random example app that I made but this should get you going.

    Lets start by supposing you have to global variable to your webview controlling class:

    String name = "John";
    String lastName = "Doe";
    

    In the Android class controlling the webview (during onCreate() or when you setup your webview):

    webView.addJavascriptInterface(new JavaScriptInterface(), "android")
    

    Inner class to your webview controlling class:

    /**
    * Sets up the interface for getting access to Latitude and Longitude data
    * from device
    **/
    private class JavaScriptInterface {
        public String getName() {
            return name;
        }
        public String getLastName() {
            return lastName;
        }
        public void onJavascriptButtonPushed(String text) {
            Toast.makeText(WebViewControllingClass.this, "The text of the pressed button is: "+text,Toast.LENGTH_SHORT).show();
        }
    }
    

    Thats it for the Android side, now to use it through Javascript:

    To get the name and lastname through JavaScript:

    if (window.android){
        name = window.android.getName();
        lastName = window.android.getLastName();
    }
    

    If you want to raise the toast, set a javascript whose function would be:

    if (window.android){
        window.android.onJavascriptButtonPushed("Hello");
    }
    

    Edit:

    I havent tried this, but a search yielded this, try it out, it should work.

    If you want to use it in the other direction:

    JS:

    function testEcho(message){
         window.JSInterface.doEchoTest(message);
    }
    

    Android:

    myWebView.loadUrl("javascript:testEcho('Hello World!')");
    

    0 讨论(0)
提交回复
热议问题