大佬教程收集整理的这篇文章主要介绍了android – 如何注册自定义语音识别服务?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的自定义语音识别服务通常使用默认的语音识别器,因为我的目标只是理解Recognitionservice和Recognitionservice.CallBACk类的工作原理.
public class SimpleVoiceservice extends Recognitionservice { private SpeechRecognizer m_ENGInesR; @Override public void onCreate() { super.onCreate(); Log.i("SimpleVoiceservice","service started"); } @Override public void onDestroy() { super.onDestroy(); Log.i("SimpleVoiceservice","service stopped"); } @Override protected void onCancel(CallBACk listener) { m_ENGInesR.cancel(); } @Override protected void onStartListening(Intent recognizerIntent,CallBACk listener) { m_ENGInesR.setRecognitionListener(new VoiceResultsListener(listener)); m_ENGInesR.startListening(recognizerIntent); } @Override protected void onStopListening(CallBACk listener) { m_ENGInesR.stopListening(); } /** * */ private class VoiceResultsListener implements RecognitionListener { private CallBACk m_UserSpecifiedListener; /** * * @param userSpecifiedListener */ public VoiceResultsListener(CallBACk userSpecifiedListener) { m_UserSpecifiedListener = userSpecifiedListener; } @Override public void onBeginningOfSpeech() { try { m_UserSpecifiedListener.beginningOfSpeech(); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onBufferReceived(byte[] buffer) { try { m_UserSpecifiedListener.bufferReceived(buffer); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onEndOfSpeech() { try { m_UserSpecifiedListener.endOfSpeech(); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onError(int error) { try { m_UserSpecifiedListener.error(error); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onEvent(int eventType,Bundle params) { ; } @Override public void onPartialResults(Bundle partialResults) { try { m_UserSpecifiedListener.partialResults(partialResults); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onReadyForSpeech(Bundle params) { try { m_UserSpecifiedListener.readyForSpeech(params); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onResults(Bundle results) { try { m_UserSpecifiedListener.results(results); } catch (remoteexception E) { e.printStackTrace(); } } @Override public void onRmsChanged(float rmsdB) { try { m_UserSpecifiedListener.rmsChanged(rmsdB); } catch (remoteexception E) { e.printStackTrace(); } } } }
我使用以下活动启动和停止服务.
public class VoiceserviceStarterActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); Button startButton = new Button(this); startButton.setText("Start the service"); startButton.setOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { startVoiceservice(); } }); Button stopButton = new Button(this); stopButton.setText("Stop the service"); stopButton.setOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { stopVoiceservice(); } }); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(startButton); layout.addView(stopButton); setContentView(layout); } private void startVoiceservice() { startservice(new Intent(this,SimpleVoiceservice.class)); } private void stopVoiceservice() { stopservice(new Intent(this,SimpleVoiceservice.class)); } }
最后,我在AndroidManifest.xml上声明了我的服务(请参阅Android SDK文件夹中的VoiceRecognition示例).
<service android:name="SimpleVoiceservice" android:label="@String/service_name" > <intent-filter> <action android:name="android.speech.Recognitionservice" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>
然后我在Android设备上安装了这个应用程序,然后启动它:
– 当我启动服务时,它正常启动;
– 当我停下来时,它会正常停止.
但是,如果我在另一个活动中启动以下代码,则活动List仅包含一个元素,这是默认的语音识别器.
PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH),0);
为什么我的语音识别器不会返回系统中的那些人?
<activity android:name="VoiceserviceStarterActivity"> <intent-filter> <action android:name="android.speech.action.RECOGNIZE_SPEECH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> ... </activity>
对于更具体的代码,请查看项目Kõnele(source code),该项目本质上是在Android上提供语音识别的接口的开源实现,即它包括:
> ACTION_RECOGNIZE_SPEECH
> ACTION_WEB_SEARCH
> Recognitionservice
并使用开源语音识别服务器.
以上是大佬教程为你收集整理的android – 如何注册自定义语音识别服务?全部内容,希望文章能够帮你解决android – 如何注册自定义语音识别服务?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。