Android,WebView和SpeechRecognition-API

时间:2016-10-31 06:52:31

标签: javascript android html5 speech-recognition webkitspeechrecognition

我面临一个相当恼人的问题: 对于客户项目,我需要使用HTML5 / JavaScript(客户规范)进行某种“结束语”检测。所以我做了一些研究并认为“好吧,让我们试试SpeechRecognition API”,它就是“onspeechend”-Event。这在我的机器上就像魅力一样,但在应用程序本身却没有。在我的研究过程中,我发现您在Apps中使用的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进行此操作。

2 个答案:

答案 0 :(得分:1)

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

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

注意:这是一个可行的解决方案。

    webView.setWebChromeClient(new WebChromeClient()
        {

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

干杯!

答案 1 :(得分:0)

似乎问题是webview正在使用默认设备渲染引擎(如in this answer所述)。该默认引擎基于Chrome 44,可能不支持您要使用的API,默认浏览器的Chrome 54中提供此功能。

尝试另一种渲染引擎实现,例如Crosswalk。有了它,您可以通过在应用中切换为appropriate crosswalk release version作为webview来确保使用特定的chrome版本。虽然嵌入它会增加你的apk大小,并且使用它共享模式要求用户从google play安装crosswalk运行时。