Обратные вызовы JavaScript не достигаются с помощью Android JSInterface
Я хочу знать, когда responseivevoice (JS) закончил говорить. Здесь в документах показано, что я могу передавать обратные вызовы, такие как onstart / onend. Итак, я сделал JSInterface и прикрепил его к WebView, который вызывает мою функцию JS. Однако я не должен делать это правильно, потому что мои обратные вызовы никогда не вводятся.
Вот мой JSInterface:
private class JSInterface{
@JavascriptInterface
public void alertStart(){
Log.i(TAG, "Speech started");
}
@JavascriptInterface
public void stopService(){
stopSelf(); //The whole point of this is to stop my Service.
}
}
Здесь я прикрепляю интерфейс к веб-представлению:
final WebView webView = new WebView(context);
webView.setSoundEffectsEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "SpeechService");
И вот мои функции JS:
function speak(text,voice,pitch,rate) {
responsiveVoice.speak(text, voice,
{
onstart: alertStart,
onend: stopService
}
);
}
function alertStart(){
SpeechService.alertStart();
}
function stopService(){
SpeechService.stopService();
}
И я вызываю функцию с моим webView из моего сервиса здесь:
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
if (sp.contains("voiceSettings")) {
String voiceSettings = sp.getString("voiceSettings", "Voice settings not available");
final String splitSettings[] = voiceSettings.split(":");
Log.i("settings", Arrays.toString(splitSettings));
webView.loadUrl("javascript:speak('" + text + "','" + splitSettings[0] + "','" + Double.parseDouble(splitSettings[1]) + "','" + Double.parseDouble(splitSettings[2]) + "')");
}
else{
webView.loadUrl("javascript:speak('" + text + "','" + "UK English Male" + "','" + 1 + "','" + 1 + "')");
}
}
});
webView.loadUrl("file:///android_asset/tts.html");
}
заранее спасибо
1 ответ
Оказывается, строка, отправляемая в функцию JS, содержала апостроф, что привело к неправильному синтаксису. Так что функция никогда не вызывалась. Необходимо обернуть ввод в двойные кавычки, чтобы обернуть все апострофы.