JavaScript回调不是';android JST接口无法访问

JavaScript回调不是';android JST接口无法访问,javascript,android,webview,android-jsinterface,Javascript,Android,Webview,Android Jsinterface,我想知道responsivevoice(JS)何时结束讲话。在文档中,它显示我可以像onstart/oned一样传递回调。因此,我制作了一个JSInterface并将其附加到调用我的JS函数的WebView。但是,我一定不能正确执行,因为我的回调从未输入 以下是我的JSF接口: private class JSInterface{ @JavascriptInterface public void alertStart(){ Log.i(TAG, "Speech s

我想知道responsivevoice(JS)何时结束讲话。在文档中,它显示我可以像onstart/oned一样传递回调。因此,我制作了一个JSInterface并将其附加到调用我的JS函数的WebView。但是,我一定不能正确执行,因为我的回调从未输入

以下是我的JSF接口:

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.
    }
}
在此,我将界面附加到webview:

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");
}

提前感谢

事实证明,发送到JS函数的字符串中有一个撇号,这导致语法不正确。因此函数从未被调用。必须将输入用双引号括起来,以便所有撇号都被括起来。

结果是,发送到JS函数的字符串中有一个撇号,这导致语法不正确。因此函数从未被调用。必须将输入用双引号括起来,以便所有撇号都被括起来。

在何处调用speak函数?您声明了语音字符串吗?我从代码中错误地复制了js语音标题,但我更新了它。我还添加了调用函数的代码。你会看到,我试图通过它的声音,音调,以及音量。而且,现在它只进入您正在调用speak函数的else条件?您声明了语音字符串吗?我从代码中错误地复制了js语音标题,但我更新了它。我还添加了调用函数的代码。你会看到,我试图通过它的声音,音调,以及音量。而且,现在它只进入else状态