3

我有一个代码可以说出从 html 传递的文本。我能够使用下面的代码使其工作。

这是代码:

    tts = new TextToSpeech(this, this);
    myWebView = (WebView) findViewById(R.id.webviewid);
    //The html text is from the server.
    myWebView.loadDataWithBaseURL(null,
            "<html>" +
            "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">" +
            "</head>" +
            "<body>" +
            "<input class=\"textBox\" id=\"pass\" type=\"text\" maxlength=\"30\" required/>" +
            "<input type=\"button\" value=\"Say hello\" onClick=\"androidSpeak('Hello Android!')\" />" +
            "<script type=\"text/javascript\">" +
            "    function androidSpeak(texttospeak) {" +
            "        Android.textToSpeak(texttospeak);" +
            "    }" +
            "</script>" +
            "</body>" +
            "</html>", "text/html", "UTF-8", null);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");

这是我的 Java 脚本界面:

    protected class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }

        /** Show a toast from the web page */
        @JavascriptInterface
        public void textToSpeak(String texttospeak) {
            Toast.makeText(mContext, texttospeak, Toast.LENGTH_SHORT).show();
            speakOut(texttospeak);
        }
    }


    private void speakOut(String text) {
        tts.speak(text, TextToSpeech.QUEUE_ADD, null);
    }

上面的代码按预期工作。我的问题是如何通过 javascript 调用 TTS 或任何其他功能(如警报或拨打电话等)。这意味着可以从 javascript 调用 tts.speak() 方法。或者以另一种方式,我想通过 javascript 调用 androids TTS,而不是创建 Java 脚本接口(如上)。这样我就不必为我要添加的每个功能向用户提供更新。

示例:请注意:下面是一个示例,我知道这是不正确的。这是为了给你一个我需要的概述。

    //The html text is from the server.
    myWebView.loadDataWithBaseURL(null,
            "<html>" +
            "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">" +
            "</head>" +
            "<body>" +
            "<input class=\"textBox\" id=\"pass\" type=\"text\" maxlength=\"30\" required/>" +
            "<input type=\"button\" value=\"Say hello\" onClick=\"androidSpeak('Hello Android!')\" />" +
            "<script type=\"text/javascript\">" +
            "    function androidSpeak(texttospeak) {" +
            "        tts = new TextToSpeech(this, this);" +
            "        tts.speak(text, TextToSpeech.QUEUE_ADD, null);" +  <<< directly invoke the android's TTS.
            "    }" +
            "</script>" +
            "</body>" +
            "</html>", "text/html", "UTF-8", null);

有没有我需要添加的插件。请告诉我。任何帮助表示赞赏。

4

3 回答 3

1

Cordova将允许您从您的 javascript 调用自定义的原生 android 代码,或者您可以使用其库中的插件,这些插件公开常见的硬件元素(例如菜单按钮、原生通知等)。Cordova 创建了一个完整的应用程序环境,因此您不必担心任何 android 应用程序细节,并在 html5/javascript 中构建您的所有应用程序逻辑。 Phonegap是 Cordova 的一个实现,它提供了非常好的构建工具——你甚至不需要在你的开发机器上设置 android 构建工具——只需上传你的 html 站点,它就会为你构建你的 android 应用程序。:P

于 2014-10-05T05:55:12.960 回答
0

您可以查看 Intel XDK:https ://software.intel.com/en-us/html5/tools并从http://xdk-software.intel.com/下载。它提供了您在对先前答案的回复中提到的 cordova 构建选项: https ://software.intel.com/en-us/html5/articles/using-the-cordova-for-android-ios-etc-build -选项

谢谢

于 2014-10-02T18:24:05.030 回答
0

是的,请查看addJavascriptInterfaceWebView 中的方法。在此处此处查看更多信息

于 2014-10-05T06:34:04.190 回答