当前位置: 代码迷 >> Android >> 是否可以在kitkat中使用html5语音API到android webview?
  详细解决方案

是否可以在kitkat中使用html5语音API到android webview?

热度:55   发布时间:2023-08-04 11:16:04.0

我有一个非常简单的网站,它使用html5语音识别API将音频转换为文本。 我的目标是让它在Android中的webview中工作,但我收到此错误:

“未捕获的TypeError:无法设置未定义的属性'lang'”,来源: :

有任何想法吗?

这是我的MainActivity:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("https://example.com/");
    }
}

这是我的javascript:

var final_transcript = '';
var recognizing = false;

if ('webkitSpeechRecognition' in window) {

  var recognition = new webkitSpeechRecognition();

  recognition.continuous = true;
  recognition.interimResults = true;

  recognition.onstart = function() {
    recognizing = true;
  }
  recognition.onerror = function(event) {
    console.log(event.error);
  };

  recognition.onend = function() {
    recognizing = false;
  }


  recognition.onresult = function(event) {
    var interim_transcript = '';
    for (var i = event.resultIndex; i < event.results.length; ++i) {
      if (event.results[i].isFinal) {
        final_transcript += event.results[i][0].transcript;
        document.getElementById("textresult").innerHTML = linebreak(interim_transcript);
      } else {
        interim_transcript += event.results[i][0].transcript;
        document.getElementById("textresult").innerHTML = linebreak(interim_transcript);
      }
    }
    final_transcript = capitalize(final_transcript);

    document.getElementById("textresult").innerHTML = linebreak(interim_transcript);
    document.getElementById("textresult").innerHTML = linebreak(final_transcript);

  };
}

var two_line = /\n\n/g;
var one_line = /\n/g;
function linebreak(s) {
  return s.replace(two_line, '<p></p>').replace(one_line, '<br>');
}

function capitalize(s) {
  return s.replace(s.substr(0,1), function(m) { return m.toUpperCase(); });
}

function startDictation(event) {
  if (recognizing) {
    recognition.stop();
    return;
  }
  final_transcript = '';
  recognition.lang = 'en-US';
  recognition.start();
  final_span.innerHTML = '';
  interim_span.innerHTML = '';
}

    </script>

您可以尝试在此行上方声明您的recognition变量吗?

if ('webkitSpeechRecognition' in window)
  相关解决方案