3

我面临一个相当烦人的问题:对于客户项目,我需要使用 HTML5/JavaScript(客户规范)进行某种“语音结束”检测。所以我做了一些研究并想“好吧,让我们试试 SpeechRecognition API”,它是“onspeechend”-Event。这在我的机器上就像魅力一样,但在应用程序本身中却不行。在我的研究中,我发现您在应用程序中使用的 WebView 实际上不是系统默认浏览器。

默认浏览器的userAgent返回我

Mozilla/5.0 (Linux; Android 6.0.1; SM-G900F Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/54.0.2840.68 Mobile Safari/537.36

但是,WebView-userAgent 返回

Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G900F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36

令人不安的是,SpeechRecognition-API 在默认浏览器中可用,但在 WebView 实例中不可用。有人知道如何解决/解决这个问题吗?

或任何想法,如何检测语音的结束。不幸的是,使用 SpeechRecognition-Intent 不是一种选择。我想这样做,但如前所述,客户坚持使用 HTML5/JavaScript 这样做。

4

2 回答 2

1

我已经在 Android 中实现了默认的语音识别。

经过大量资源挖掘,我发现您只需要通过 webviewchromeclient 授予权限

注意:这是一个有效的解决方案。

    webView.setWebChromeClient(new WebChromeClient()
        {

            @Override
            public void onPermissionRequest(final PermissionRequest request) {
                request.grant(request.getResources());
            }
}

干杯!

于 2019-04-07T06:36:40.547 回答
0

似乎问题在于 webview 正在使用默认设备渲染引擎(如本答案中所述)。并且该默认引擎基于 Chrome 44,它可能不支持您要使用的 API,该 API 在默认浏览器的 Chrome 54 中可用。

尝试渲染引擎的另一种实现,例如Crosswalk有了它,您可以通过切换到适当的人行横道发布版本作为应用程序中的 web 视图来确保使用特定的 chrome 版本。虽然嵌入它会增加您的 apk 大小,并且使用它共享模式需要用户从 google play 安装人行横道运行时。

于 2016-11-08T21:56:22.147 回答