我有一个代码可以说出从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);
有什么插件需要我添加吗。请告诉我。感谢您的帮助。
Cordova将允许您从javascript中调用自定义的原生android代码,或者您可以使用他们库中的插件,这些插件可以公开常见的硬件元素(如菜单按钮、原生通知等)。Cordova创建了一个完整的应用程序环境,因此您不必担心任何android应用程序的细节,并用html5/javascript构建所有应用程序逻辑。Phonegap是Cordova的一个实现,它提供了非常好的构建工具-你甚至不需要在你的开发机器上设置android构建工具-只需上传你的html网站,它就会为你构建你的android应用程序。:P
您可以看看英特尔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-option
感谢
是的,请查看WebView中的addJavascriptInterface
方法。点击此处查看更多信息