在Android webapps中调用JS的本机代码

时间:2012-02-09 20:17:02

标签: android html5 native

我正在编写一个Android“web”应用程序(我不会将APP上传到网络,而是在应用程序资源中设置HTML + JS)。这意味着,GUI将是HTML5,我将使用另一个“本机”线程从麦克风中读取,并希望将“已解析的文本”发送到HTML5 / JS代码。

这可能吗?在Android代码中,我看到如何从JS调用本机代码(我想要相反)。

http://developer.android.com/guide/webapps/webview.html

1 个答案:

答案 0 :(得分:8)

是的,Android实际上就是这样。

我正在发布我自己制作的随机示例应用中的示例代码,但这应该可以帮助你。

让我们假设您必须将全局变量添加到您的webview控制类:

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

在控制webview的Android类中(onCreate()期间或设置webview时):

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

webview控制类的内部类:

/**
* 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();
    }
}

这适用于Android方面,现在通过Javascript使用它:

通过JavaScript获取名称和姓氏:

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

如果你想举杯,请设置一个javascript,其功能如下:

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

修改

我没有尝试过这个,但search产生了这个,尝试一下,它应该有用。

如果您想在另一个方向使用它:

JS:

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

机器人:

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