语音识别作为后台服务
Posted
技术标签:
【中文标题】语音识别作为后台服务【英文标题】:Voice Recognition as a background service 【发布时间】:2011-09-16 08:33:36 【问题描述】:是否可以将活动实现为服务?我的活动是语音识别活动。我想让活动在应用程序的后台运行,不断检查语音,当用户说出命令时,它会识别它,然后执行操作。我的问题是......是否可以这样做,如果可以,后台服务如何通知当前活动或应用程序?之前有一篇关于此的帖子没有明确的答案……感谢您的任何意见或帮助。这是语音活动...取自另一个 *** 帖子:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import android.util.Log;
public class voiceRecognitionTest extends Activity implements OnClickListener
private TextView mText;
private SpeechRecognizer sr;
private static final String TAG = "MyStt3Activity";
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button speakButton = (Button) findViewById(R.id.btn_speak);
mText = (TextView) findViewById(R.id.textView1);
speakButton.setOnClickListener(this);
sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(new listener());
class listener implements RecognitionListener
public void onReadyForSpeech(Bundle params)
Log.d(TAG, "onReadyForSpeech");
public void onBeginningOfSpeech()
Log.d(TAG, "onBeginningOfSpeech");
public void onRmsChanged(float rmsdB)
Log.d(TAG, "onRmsChanged");
public void onBufferReceived(byte[] buffer)
Log.d(TAG, "onBufferReceived");
public void onEndOfSpeech()
Log.d(TAG, "onEndofSpeech");
public void onError(int error)
Log.d(TAG, "error " + error);
mText.setText("error " + error);
public void onResults(Bundle results)
String str = new String();
Log.d(TAG, "onResults " + results);
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < data.size(); i++)
Log.d(TAG, "result " + data.get(i));
str += data.get(i);
mText.setText("results: "+String.valueOf(data.size()));
public void onPartialResults(Bundle partialResults)
Log.d(TAG, "onPartialResults");
public void onEvent(int eventType, Bundle params)
Log.d(TAG, "onEvent " + eventType);
public void onClick(View v)
if (v.getId() == R.id.btn_speak)
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5);
sr.startListening(intent);
Log.i("111111","11111111");
【问题讨论】:
嗨,我想做类似的事情,我知道你问这个问题已经有一段时间了,我想知道你有没有办法做到这一点?跨度> 检查这个:***.com/questions/11406925/… 【参考方案1】:您可以做的是启动识别器活动,该活动将侦听命令,当它找到合适的命令时,它将执行您希望它对该特定命令执行的任何操作。这种简单方法的问题在于,活动将不断地监听语音输入,更重要的是它需要集中注意力而不是在后台运行......
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html
【讨论】:
所以真的没有实现某种语音命令系统吗? 这个答案怎么能真正回答这个问题,因为这个人需要服务而不是活动中的语音识别器?以上是关于语音识别作为后台服务的主要内容,如果未能解决你的问题,请参考以下文章