2011-06-16 13 views
15

¿Es posible implementar una actividad como servicio? Mi actividad es una actividad de reconocimiento de voz. Quiero que la actividad se ejecute en el fondo de la aplicación buscando constantemente la voz y cuando el usuario dice un comando lo reconocerá y luego realizará la acción. Mi pregunta es ... ¿es posible hacer esto y, de ser así, cómo puede el servicio de fondo notificar a la actividad o aplicación actual? Hubo una publicación anterior sobre esto que no tenía una respuesta clara ... Gracias por cualquier aportación o ayuda. Esta es la actividad de voz ... tomado de otro post StackOverflow:Reconocimiento de voz como servicio en segundo plano

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"); 
      } 
    } 
} 
+1

Hola, estoy buscando hacer algo similar a esto, sé que ha pasado un tiempo desde que hiciste esta pregunta, me preguntaba ¿has descubierto una forma de hacer esto? – Peter

+0

Compruebe esto: http://stackoverflow.com/questions/11406925/speech-recognition-as-a-service-android – SepehrM

Respuesta

0

Lo que puede hacer es poner en marcha la actividad reconocedor que escuchar los comandos y cuando encuentra un comando adecuado que hará lo que usted quiere que hacer en ese comando en particular. El problema con este enfoque simple es que la actividad estará escuchando constantemente para entrada de voz y lo más importante que tiene que ser enfocado y no se ejecuta en segundo plano ...

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html

+1

¿De modo que realmente no hay de todos modos para implementar un tipo de sistema de comando de voz? –

+24

¿Cómo puede esta respuesta responder realmente a la pregunta ya que la persona necesita un reconocedor de voz en un servicio y no una actividad? – ozmank

Cuestiones relacionadas