Android 使用更多电池在后台收听语音API
我正在用android开发一个应用程序,它可以在后台一直听声音。我正在使用SpeechRecognitor脱机api。请任何人告诉我最好的选择。我的代码是:Android 使用更多电池在后台收听语音API,android,background,listener,speech-recognition,voice-recognition,Android,Background,Listener,Speech Recognition,Voice Recognition,我正在用android开发一个应用程序,它可以在后台一直听声音。我正在使用SpeechRecognitor脱机api。请任何人告诉我最好的选择。我的代码是: public void raise() { try { handler.post(new Runnable() { @Override public void run() { offSound(); s
public void raise() {
try {
handler.post(new Runnable() {
@Override
public void run() {
offSound();
speech = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
listener = new MyRecognitionListener();
speech.setRecognitionListener(listener);
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, SharedPreferenceWriter.getInstance(getApplicationContext()).getString(SPreferenceKey.SELECTED_LANGUAGE));
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication().getPackageName());
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, 1000);
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 1000);
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 1000);
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, true);
enter code here
speech.startListening(intent);
/*
* if (countPrintLog++ > 150) { countPrintLog = 0;
* LogManager
* .getInstance().writeToLog(LogManager.LOG_STORAGE_FILE,
* "Speech Recogniser is working"); }
*/
Log.i("", "Calling the Recognise");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
class MyRecognitionListener implements RecognitionListener {
@Override
public void onBeginningOfSpeech() {
}
@Override
public void onBufferReceived(byte[] buffer) {
}
@Override
public void onEndOfSpeech() {
}
@Override
public void onError(int error) {
onSound();
Log.i("", "onError");
isCriticalSectionRaise = false;
}
@Override
public void onEvent(int eventType, Bundle params) {
}
@Override
public void onPartialResults(Bundle partialResults) {
}
@Override
public void onReadyForSpeech(Bundle params) {
}
@Override
public void onResults(Bundle results) {
}
@Override
public void onRmsChanged(float rmsdB) {
}
}
这会消耗大量电池资源并加热设备。我正在寻找一个更好的选择大词汇量语音识别需要相当多的资源,您需要使用特殊的解决方案来持续收听 如果您感兴趣,可以看看Android上的CMUSphinx
上面的演示可以有效地监听关键字“oh mighty computer”,您可以配置关键字和检测阈值。在我们的实验中,听力比屏幕占用更少的资源,电池也可以轻松使用一整天。摩托罗拉“X”手机(Droid Ultra、Moto X、Droid MAXX)有一个专用的语音识别芯片,该芯片始终处于开启状态,并且能够正常工作。然而,仅仅是凡人无法使用它,而且可能只有有限的短语识别能力。我不认为你能以任何其他方式做你想做的事情——除非你找到一种方法让SR关闭,直到其他传感器输入(即光传感器)告诉你打开它。我们需要为摩托罗拉“X”手机(Droid Ultra、Moto X、Droid MAXX)编写一些特定的代码吗对于语音识别或相同的代码将是可行的。我不相信应用程序开发人员可以访问Moto X硬件。感谢Nikolay Shmyrev提供这个漂亮的解决方案。我们可以使用这个api设置一个特定的单词吗?这样当用户标记这个特定的单词时。。。应用程序将播放音乐。是的,您可以配置任意关键字。为了获得最佳的检测精度,关键字应该有4-5个音节。你可以在这里看到简短的代码示例:非常感谢,现在它在onResult中给了我正确的答案。但如果我在KEYPHASE中设置hello并尝试说Lock或其他单词,但它总是给我结果“hello”,则需要调整阈值以避免错误检测(参见链接)。Hello太短了,你需要更长的短语,比如“Hello Conrad”。