Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何注册自定义语音识别服务?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个简单的语音识别服务:为此我创建了一个 android.speech.Recognitionservice的子类,并创建了一个活动来启动和停止此服务.

我的自定义语音识别服务通常使用认的语音识别器,因为我的目标只是理解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);

为什么我的语音识别器不会返回系统中的那些人?

解决方法

如果你想使用queryIntentActivities(新的Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH),0)来获取你的活动(VoiceserviceStarterActivity),那么你必须在应用程序的Manifest中声明这个活动处理RecognizerIntent.ACTION_RECOGNIZE_SPEECH,就像这样
<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,请注明来意。