2017-08-08 15 views
0

私は、SpeechRecognizer APIをサービスで実装する方法を見つけようとしています(バックグラウンドで実行されます)。条件が満たされたときに、応用。私の質問は、これがネイティブでも可能かどうかです。もしそうなら、どうやってやるの?Androidサービスでの音声認識のトリガー

+0

これまで行ってきたことはありますか?あまりにも多くのバッテリーやインターネットや他のリソースを消費するため、SpeechRecognizerをバックグラウンドで実行するのは良い考えではありません。 –

+0

私はバックグラウンドで実行されませんが、条件が満たされたときにトリガーされます。 – sebklopfer

+0

Googleプロンプトではなく、カスタムリスナーでSpeechRecognizerに知られていますか? –

答えて

1

ここは私のコードスニペットです。このような認識リスナは、サービスで使用できます。 サービスをどのようにスケジューリングするのか分かりませんが、私はそれをあなたに残しました。しかし、あなたはこのようなことをすることができます。 (私はサービスを再起動するためのコードを追加していません/タイマーなどで起動します)

public class MyService extends Service { 
    protected static SpeechRecognizer mSpeechRecognizer; 
    protected Intent mSpeechRecognizerIntent; 
    Context c; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
    //if condition is met then do this 
     SpeechRecognitionListener h = new SpeechRecognitionListener(); 
     mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
     mSpeechRecognizer.setRecognitionListener(h); 
     mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     Log.d("avail", " " + mSpeechRecognizer.isRecognitionAvailable(this)); 
     if (mSpeechRecognizer.isRecognitionAvailable(this)) 
      Log.d("created", "onBeginingOfSpeech"); 
     mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
       this.getPackageName()); 
     mSpeechRecognizer.startListening(mSpeechRecognizerIntent); 

     return START_STICKY; 
    } 


    @Override 
    public void onCreate() { 
     super.onCreate(); 
     c= getApplicationContext(); 


    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 



    class SpeechRecognitionListener implements RecognitionListener { 

     @Override 
     public void onReadyForSpeech(Bundle bundle) { 

      Log.d("onReady", "service"); 
     } 

     @Override 
     public void onBeginningOfSpeech() { 
     } 

     @Override 
     public void onRmsChanged(float v) { 

     } 

     @Override 
     public void onBufferReceived(byte[] bytes) { 

     } 

     @Override 
     public void onEndOfSpeech() { 

     } 

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

     @Override 
     public void onResults(Bundle resultsBundle) { 
      Log.d("Results", "onResults"); 
     } 

     @Override 
     public void onPartialResults(Bundle bundle) { 

     } 

     @Override 
     public void onEvent(int i, Bundle bundle) { 

     } 
    } 

    } 
+0

恐ろしい!ありがとうヒープ – sebklopfer

+0

probsはありません。乾杯! – Pavan