我有一個代碼來說明從HTML傳遞的文本。我可以使用下面的代碼使其工作。Android:如何通過JavaScript啓動android的功能
下面是代碼:
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來調用androidTSTTS,而不是創建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);
是否有我需要添加的插件。請告訴我。任何幫助表示讚賞。
您提出的問題(使用JavaScript調用Android代碼)幾乎是不可能的。即使有可能(使用反射等),這將是一個巨大的安全風險,幾乎肯定會從遊戲商店中刪除。 – Nachi 2014-09-25 11:50:06
好的,我正在研究更多這個..我碰到'cordova'。你有這個想法,所以上面可以使用'cordova'嗎? – User12111111 2014-09-25 12:06:02
您絕對可以使用cordova將JavaScript代碼交叉編譯爲Android,但無法遠程更新此功能。每當您添加/更改功能時,您仍然必須上傳新的APK。 – Nachi 2014-09-25 12:08:10