Собственный код, вызывающий JS в веб-приложениях Android - PullRequest
4 голосов
/ 10 февраля 2012

Я пишу "веб-приложение" для Android (я не буду загружать приложение в Интернет, но установлю HTML + JS внутри ресурсов приложения).Это означает, что GUI будет HTML5, и я буду использовать другой «нативный» поток для чтения с микрофона и, надеюсь, отправлю «проанализированный текст» в код HTML5 / JS.

Возможно ли это?В коде Android я вижу, как я могу вызвать собственный код из JS (и я хочу наоборот).

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

1 Ответ

8 голосов
/ 10 февраля 2012

Да, на самом деле Android ругается.

Я публикую пример кода из случайного примера приложения, которое я сделал, но это должно помочь вам.

Давайте начнем с предположения, что у вас естьв глобальную переменную для вашего класса управления веб-просмотром:

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

В классе Android, контролирующем веб-просмотр (во время onCreate() или при настройке веб-просмотра):

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

Внутренний класс дляваш класс управления веб-просмотром:

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

Android:

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