2013-04-16 83 views
1

目前我正在制作Phonegap应用程序。 我想结合增强现实和语音输入。 Phonegap有一个名为SpeechRecognizer的插件,但我无法使其工作。使用Phonegap在Android上启动语音识别器

我的头:

<script type="text/javascript" src="cordova-2.6.0.js"></script> 
    <script type="text/javascript" src="SpeechRecognizer.js"></script> 
    <script type="text/javascript" charset="utf-8"> 
     document.addEventListener("deviceready", onDeviceReady, false); 

     function speechOk() { 
      alert('speech works'); 
     } 

     function speechFail() { 
      alert("speech doesn't work"); 
     } 

     function onDeviceReady() { 
      window.plugins.speechrecognizer.init(speechOk, speechFail); 
     } 

     $("#micButton").bind("touchstart", function() {  
      var requestCode = 4815162342; 
      var maxMatches = 1; 
      var promptString = "What do you want?"; 
      window.plugins.speechrecognizer.startRecognize(speechOk, speechFail, requestCode, maxMatches, promptString); 
     }); 
    </script> 

项目(config.xml文件)的图片: enter image description here

在此先感谢

+0

通过关注github回购上的readme.md,我得到了它的正常工作。你确定一切拼写正确吗?最初我遇到了麻烦,因为我把它打错为** speechRecgonizer **。另外...你的设备上是否有语音识别器应用程序?它适用于Nexus7,但在没有语音识别器应用程序的较旧设备上运行失败。 “'onDeviceReady()''中的console.log(window.plugins.speechrecognizer)''会发生什么?最后,你的日志说什么? – MBillau

+0

这很奇怪。我无法让它工作。我的控制台日志:“未捕获TypeError:无法读取属性'undefined'的语音识别器' 你有什么想法:你的设备上是否有语音识别器应用程序?我有一个索尼Xperia Z(android 4.1.2),所以不能成为问题的权利? – Tober

+0

我已经在Android清单中将min sdk版本更改为15,现在我不再有任何控制台错误,但现在它不记录任何内容。 – Tober

回答

1

有几个问题。 首先,SDK版本不对。如果你使用新的科尔多瓦,你还必须使用最新版本的插件。该版本需要SDK 15或更高版本。 (android manifest - ><uses-sdk android:minSdkVersion="15" android:targetSdkVersion="17" />)。 之后,出于某种原因,插件init不返回任何内容。 我只是触发了:window.plugins.speechrecognizer.startRecognize();点击按钮上的功能,然后执行。

的JavaScript(你需要的jQuery此代码):

$("#micButton").bind("touchstart", function() {   
     var requestCode = 4815162342; 
     var maxMatches = 1; 
     var promptString = "What do you want?"; 
     window.plugins.speechrecognizer.startRecognize(speechOk, speechFail, requestCode, maxMatches, promptString); 
    }); 

    function speechOk(result) { 
     var match, respObj; 
     if (result) { 
      respObj = JSON.parse(result); 
      if (respObj) { 
       var response = respObj.speechMatches.speechMatch[0]; 
       $("#searchField").val(response); 
       $("#searchButton").trigger("touchstart"); 
      } 
     } 
    } 

    function speechFail(m) { 
     navigator.notification.alert("Sorry, I couldn't recognize you.", function() {}, "Speech Fail"); 
    } 

'#micButton' 是你必须按下启动Android的语音识别

按钮 '#searchField' 是一个输入领域至多从语音识别得到结果

感谢MrBillau的好建议。

+3

我已更新插件以删除无用的init方法。该插件在那里可用:https://github.com/poiuytrez/SpeechRecognizer/。如果您遇到任何错误,请创建问题单。 – poiuytrez

2

是不是你的错,SpeechRecognizer.java里面有一个bug。

我有同样的问题,我只是用Speech Recognizer插件替换旧版本(如2.0.0),解决了它,你可以从github下载它。

它为我工作Phonegap 2.5.0,猜测它在2.6.0的作品。