小编srf*_*srf的帖子

直接使用SpeechRecognizer API - onResults()保持返回null

我一直试图按照这篇文章中的例子.

由于我没有尝试在服务中实现这一点,而是在标准活动中实现,因此我没有遇到上述帖子中描述的问题.

然而,当getStringArrayList(RecognizerIntent.EXTRA_RESULTS)返回null 时,我不断得到"没有语音结果" - 正如在该帖子中实现的那样.

很显然,我的思念中需要做什么成才,除了

recognizer.setRecognitionListener(listener);
recognizer.startListening(intent);    
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

是否有可能除了startListening()之外我还需要startActivityForResult()?如果是这样,我已经尝试了这个,但它调用了完整的谷歌语音搜索活动(这是我试图避免的,就像@ vladimir.vivien在这里写的那样).由于2个识别器同时运行,这会产生更多问题......

起初我认为缺少的是实际提交给Google的服务器,但是当我从语音识别会话开始直到结束时检查LogCat输出(见下文)时,我看到它实际上创建了一个带有http:/的TCP会话/www.google.com/m/voice-search.

所以显而易见的问题是我错过了什么?

04-18 07:02:17.770: INFO/RecognitionController(623): startRecognition(#Intent;action=android.speech.action.RECOGNIZE_SPEECH;S.android.speech.extra.LANGUAGE_MODEL=free_form;S.android.speech.extra.PROMPT=LEARNSR;S.calling_package=com.example.learnsr.SrActivity;end)
04-18 07:02:17.770: INFO/RecognitionController(623): State change: STARTING -> STARTING
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Switching audio device to 
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Speakerphone
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): AudioHardware PCM record is going to standby.
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Switching audio …
Run Code Online (Sandbox Code Playgroud)

android speech-recognition voice-recognition

6
推荐指数
1
解决办法
3833
查看次数

信号量:我在哪里可以了解许可证,公平性,驳船等基本概念

developer.android.com中Semaphore类概述看起来非常好 - 对于那些已经熟悉概念和术语的人来说.

我熟悉那里的一些首字母缩略词和其他术语(例如FIFO,锁等),但是对我来说是新的permits,fairness并且barging对我来说是新的.

你能推荐一个很好的在线资源来解释这些概念吗?(我可能会弄清楚许可公平是什么,但barging在这一点上是未知的).

编辑:收到下面的两个答案后,我意识到我需要刷新信号量(重新获取()术语).我发现以下资源很有用:

  1. Semaphore_(编程)
  2. Richard S. Hall博士介绍信号量

java android semaphore

6
推荐指数
1
解决办法
933
查看次数

Android 2.2:模拟器中语音输入的选项在哪里?

我的Nexus One有它:

  1. 设置包括"语音输入和输出设置"列表中的"语音识别器设置".
  2. Google搜索旁边有一个麦克风按钮,所以当我触摸它时,会出现一个对话框,提示我说出我想要搜索的内容.

但是,在模拟器(API级别8,Android 2.2)上,无法找到上述任何内容.

Android 2.2不是语音搜索的一部分吗?如果是这样,为什么在我的Nexus One(Froyo)上找到它,而不是在模拟器上?

至少可以使用"语音输入和输出设置",我需要做什么?

更新1:我按照以下建议创建启用识别器的AVD的说明,但我仍然收到"识别器不存在"消息:

在此输入图像描述

我还需要做什么?

尽管安装Google API,Android API 8,修订版2并使用它创建了一个特殊的AVD,我是否有可能仍然需要从Android Market安装语音搜索应用程序?

更新2:我按照迈克尔的更正来安装谷歌的语音搜索应用程序.这解决了"识别器不存在"的问题,但现在我遇到了一个新问题:

在此输入图像描述

该应用程序的建议"再次说话"是假的:再次说话会一遍又一遍地呈现相同的错误消息.

speech-recognition speech-to-text voice-recognition android-emulator

5
推荐指数
1
解决办法
3503
查看次数

Android SpeechRecognizer:stopListening()与cancel()

仅从名称,我可以推导出stopListening()startListening()相反.

我也可以理解destroy()createSpeechRecognizer()相反.

取消() ......与什么相反?

我在文档中找到的所有内容是:

取消语音识别.

cancel()与stopListening()有何不同?

android speech-recognition voice-recognition

5
推荐指数
1
解决办法
2925
查看次数

假冒KeyEvent不能正常工作*就像"真实"按钮一样.为什么?

我试图用KEYCODE_BACK调用我的主要活动的onKeyDown(),这样它就像我自己按下"后退"按钮一样.我使用以下代码执行此操作:

   KeyEvent goBackDown = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK,0,0);
    goBackDown.dispatch(activity);
    SystemClock.sleep(50);  // as if human pressed the key
    KeyEvent goBackUp = new KeyEvent(0,0,KeyEvent.ACTION_UP,KeyEvent.KEYCODE_BACK,0,0);
    goBackUp.dispatch(activity);
Run Code Online (Sandbox Code Playgroud)

我的活动的onKeyDown()目前只调用:

return super.onKeyDown(keyCode, event);
Run Code Online (Sandbox Code Playgroud)

然而,与真正的 Back按钮不同,当调用"假"代码时,活动拒绝变得不可见.

为什么?

android keyevent back-button onkeydown onpause

5
推荐指数
1
解决办法
7184
查看次数

泄漏发现:AndroidHttpClient已创建且从未关闭

我没有在我的代码中的任何地方实例化AndroidHttpClient,但我确实启动了识别器意图,在我的应用程序运行时会产生此异常:

Leak found
java.lang.IllegalStateException: AndroidHttpClient created and never closed
    at android.net.http.AndroidHttpClient.<init>(AndroidHttpClient.java:152)
    at android.net.http.AndroidHttpClient.newInstance(AndroidHttpClient.java:138)
    at com.google.android.voicesearch.speechservice.SpeechServiceHttpClient.<init>(SpeechServiceHttpClient.java:59)
    at com.google.android.voicesearch.speechservice.ServerConnectorImpl.<init>(ServerConnectorImpl.java:85)
    at com.google.android.voicesearch.VoiceSearchContainerImpl.createRecognitionController(VoiceSearchContainerImpl.java:83)
    at com.google.android.voicesearch.GoogleRecognitionService.onCreate(GoogleRecognitionService.java:65)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2066)
    at android.app.ActivityThread.access$2500(ActivityThread.java:123)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3835)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

假设该错误不在Android的代码中,但在我的代码中,这个泄漏的资源可能只在以下之一中创建:

  1. SpeechRecognizer.createSpeechRecognizer()
  2. new RecognitionListener()
  3. new Intent(SpeechRecognizer.RESULTS_RECOGNITION)
  4. SpeechRecognizer.startListening(recognizerIntent)

但我怎么知道哪一个?

android speech-recognition httpclient

5
推荐指数
1
解决办法
4607
查看次数

NDEV/Dragon Mobile SDK是否需要访问Internet?

我正在寻找一种将有限词汇量语音识别集成到我的Android应用程序中的方法(因为Google语音搜索依赖于用户并不总是可以访问的Internet访问).

我找到了Nuance页面,诱使程序员下载NDEV或"Dragon Mobile SDK",但如果它需要像Google Voice Search一样上网,我为什么要对它感兴趣呢?

不幸的是,Nuance的页面信息量不大,需要您注册(并签署龙卷协议......),然后才有机会花时间下载和使用该套件,但发现它不是您要找的内容...

您是否碰巧知道NDEV 的语音识别部分或"Dragon Mobile SDK"是否需要访问Internet?

你知道任何现成的货架SDK的Android版的并不需要访问Internet(即一些有限的词汇量语音识别可以在本地的Android设备上完成的)?

android speech-recognition

5
推荐指数
1
解决办法
1774
查看次数

从Eclipse工作区.metadata签到什么

我一直在版本控制我的工作区下的项目,但我从未想过我应该检查工作区配置本身.

到现在.

我知道我对永久膨胀的.log文件完全没兴趣,所以我绝对不会检查它,但是......我可以丢弃其他其他子目录或文件吗?应该.lock检查(大小0)吗?.plugins子目录怎么样?

eclipse version-control

4
推荐指数
1
解决办法
2453
查看次数

是否有 isListening() 方法或者...如何实现 isListening()

SpeechRecognizer类包含 isRecognitionAvailable()、startListening()stopListening() 等方法,但没有检查当前是否正在监听的方法。

我也检查了RecognitionListener类,它也没有这样的“isListening()”方法。

知道为什么吗?(例如,它没有用/没有意义,太容易由应用程序程序员实现,等等)

如果确实没有SDK API提供此功能,那么实现这种“isListening()”方法的最佳方法是什么?

是否像在 onReadyForSpeech() 中设置布尔值并在 onEndOfSpeech() 中清除它一样简单?

或者我是否需要更复杂的东西,例如计数器......甚至原子计数器?

android speech-recognition

4
推荐指数
1
解决办法
322
查看次数