【问题标题】:Android, WebView and SpeechRecognition-APIAndroid、WebView 和 SpeechRecognition-API
【发布时间】:2016-10-31 06:52:30
【问题描述】:

我面临一个相当烦人的问题: 对于客户项目,我需要使用 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 进行此操作。

【问题讨论】:

  • 为什么要求不使用原生方法?
  • 因为客户希望“将代码重用于其他基于 Web 的应用程序”。不要问,我也对此不感兴趣,因为这会导致比需要更多的工作。
  • 完全不使用本机并使用 Cordova 应用程序可能是一个想法吗? 请注意,虽然 1 个代码库有时很棒,但它往往会导致最低分母的妥协,并错过一些很棒的东西。
  • 没有解决问题,因为没有满足要求。如果我们编写一个 Cordova-App,我们仍然没有用可重用的 JavaScript 编写主要部分。
  • 所以你的应用是纯html/js的?没有科尔多瓦包装纸或类似的东西?然后除了提示用户为 android 安装 chrome 之外,我看不出如何解决这个问题。只是好奇你为什么提到 SpeechRecognition-Intent。您不能从浏览器中使用这些意图,或者可以吗?

标签: javascript android html speech-recognition webkitspeechrecognition


【解决方案1】:

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

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

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

    webView.setWebChromeClient(new WebChromeClient()
        {

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

干杯!

【讨论】:

    【解决方案2】:

    似乎问题在于 webview 正在使用默认设备渲染引擎(如 in this answer 所解释的那样)。并且该默认引擎是基于 Chrome 44 的,它可能不支持您要使用的 API,该 API 在默认浏览器的 Chrome 54 中可用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多