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

elc*_*uco 4 html5 android native

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

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

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

bli*_*uff 8

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

我发布了一个随机示例应用程序中的示例代码,但是这应该可以帮到您.

让我们首先假设您必须为webview控件类设置全局变量:

String name = "John";
String lastName = "Doe";
Run Code Online (Sandbox Code Playgroud)

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

webView.addJavascriptInterface(new JavaScriptInterface(), "android")
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

要通过JavaScript获取名称和姓氏:

if (window.android){
    name = window.android.getName();
    lastName = window.android.getLastName();
}
Run Code Online (Sandbox Code Playgroud)

如果你想提高吐司,设置一个javascript,其功能将是:

if (window.android){
    window.android.onJavascriptButtonPushed("Hello");
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我没试过这个,但搜索产生了这个,尝试一下,它应该工作.

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

JS:

function testEcho(message){
     window.JSInterface.doEchoTest(message);
}
Run Code Online (Sandbox Code Playgroud)

安卓:

myWebView.loadUrl("javascript:testEcho('Hello World!')");
Run Code Online (Sandbox Code Playgroud)