2013-08-07 11 views
5

サービスとしてAndroid音声認識を実行しようとしています。サービスのonCreate()メソッドとonStart()メソッドが呼び出されていることを確認できますが、SpeechRecognizerオブジェクトを正しく設定したにもかかわらず、音声認識メソッドのコールバックは呼び出されません。音声認識は、サービスではなくアクティビティで実行されたときに機能するようです。それをサービスとして機能させるにはどうすればよいですか?これは明白な問題ですか?サービスとしてAndroid SpeechRecognizerを使用するにはどうすればよいですか?

package net.viralpatel.android.speechtotextdemo; 

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 

import android.app.Service; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.speech.RecognitionListener; 
import android.speech.RecognizerIntent; 
import android.speech.SpeechRecognizer; 
import android.util.Log; 
import android.widget.Toast; 

public class MyService extends Service implements RecognitionListener { 
    private SpeechRecognizer speechRecognizer; 
    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 
    @Override 
    public void onCreate() { 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
     Log.d("tag", "onCreate"); 
     speechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext()); 
     speechRecognizer.setRecognitionListener(this); 

     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 

     speechRecognizer.startListening(intent); 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); 
     Log.d("tag", "onDestroy"); 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
     Log.d("tag", "onStart"); 
    } 

    @Override 
    public void onBeginningOfSpeech() { 
     Log.d("Speech", "onBeginningOfSpeech"); 
    } 

    @Override 
    public void onBufferReceived(byte[] buffer) { 
     Log.d("Speech", "onBufferReceived"); 
    } 

    @Override 
    public void onEndOfSpeech() { 
     Log.d("Speech", "onEndOfSpeech"); 
    } 

    @Override 
    public void onError(int error) { 
     Log.d("Speech", "onError"); 
    } 

    @Override 
    public void onEvent(int eventType, Bundle params) { 
     Log.d("Speech", "onEvent"); 
    } 

    @Override 
    public void onPartialResults(Bundle partialResults) { 
     Log.d("Speech", "onPartialResults"); 
    } 

    @Override 
    public void onReadyForSpeech(Bundle params) { 
     Log.d("Speech", "onReadyForSpeech"); 
    } 

    @Override 
    public void onResults(Bundle results) { 
     Log.d("Speech", "onResults"); 
     ArrayList strlist = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     for (int i = 0; i < strlist.size();i++) { 
     Log.d("Speech", "result=" + strlist.get(i)); 
     } 
     BufferedWriter out; 
    try { 
     out = new BufferedWriter(new FileWriter("mnt/sdcard/results.txt")); 
//  out.write(processor.execute(strlist.get(0).toString())); 
      out.write("hello world"); 
    } catch (IOException e) { 
     Log.e("Speech",e.toString()); 
    } 
    } 

    @Override 
    public void onRmsChanged(float rmsdB) { 
     Log.d("Speech", "onRmsChanged"); 
    } 
} 
+1

質問をする前にStackOverflowで検索しましたか? :) - http://stackoverflow.com/questions/9997720/how-to-register-a-custom-speech-recognition-service- http://stackoverflow.com/questions/14940657/android-speech-recognition-as -a-service-on-android-4-1-4-2 - [例:SpeechActivationService.java](https://github.com/gast-lib/gast-lib/blob/master/library/src/root) /gast/speech/activation/SpeechActivationService.java "サンプルソースコード") – Organ

答えて

0

明確にする必要があると思われる2つの事柄があり、回避策としてご提供する場合があります。

  1. サービスをマニフェストに適切に宣言しましたか? これは既に対処済みのものだと思います。

  2. 音声認識でサービスの「onCreate」が開始されないことがあります。私は同様の実装を行っていたが、うまくいかなかった。他のメソッドにstartListening(intent)を配置し、明示的に呼び出すことができます。これは私のために働いた。

助けがあれば教えてください。

関連する問題