2011-03-07 16 views
5

Estoy tratando de ejecutar el TTS de Android dentro de un servicio, pero no tengo idea de por qué no funciona, se compila, no falla, pero simplemente no funciona .Ejecutando Android TTS en un servicio

Sin embargo, la notificación de Toast sí funciona.

package alarm.test; 

import android.app.Service; 
import com.google.tts.TextToSpeechBeta; 
import android.content.Intent; 
import android.os.IBinder; 
import android.widget.Toast; 

public class MyAlarmService extends Service { 

    private TextToSpeechBeta myTts; 
    private TextToSpeechBeta.OnInitListener ttsInitListener = new TextToSpeechBeta.OnInitListener() { 
     public void onInit(int arg0, int arg1) { 
      myTts.speak("", 0, null); 
     } 
    }; 

@Override 
public void onCreate() { 
// TODO Auto-generated method stub 
    myTts = new TextToSpeechBeta(this, 
      ttsInitListener); 

Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show(); 
} 

@Override 
public IBinder onBind(Intent intent) { 
// TODO Auto-generated method stub 
    myTts.speak("something is working", TextToSpeechBeta.QUEUE_FLUSH, null); 
Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show(); 
return null; 
} 

@Override 
public void onDestroy() { 
// TODO Auto-generated method stub 
super.onDestroy(); 
Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
// TODO Auto-generated method stub 
super.onStart(intent, startId); 
Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show(); 
} 

@Override 
public boolean onUnbind(Intent intent) { 
// TODO Auto-generated method stub 
Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show(); 
return super.onUnbind(intent); 
} 

} 
+0

Por favor describa con más detalle lo que quiere decir con "no trabaje". ¿Qué ves en LogCat? –

+0

debug/TextToSpeechBeta (512): TextToSpeechBeta no instled - dfauing a TextToSpeech básica plataforma para hablar VERBOSE/TtsSice (418): el servicio TTS recibidas INFO/TtsService (418): Stoping INFO/TtsService (418): Detenido VERBOSE/TtsService (418): Procesamiento TTS: VERBOSE/TtsService (418): TtsService.setLanguage (esp, USA,) INFO/SVOX Pico Engine (418): Idioma ya cargado (en-US == en-US) DEBUG/dalvikvm (68): GC_CONCURRENT liberado 719K, 48% libre 4093K/7751K, externo 2041K/2378K, pausa 21ms + 27ms DEPURACIÓN/SntpClient (68): tiempo de solicitud fallido: java.net.SocketException: familia de dirección no compatible con protocolo –

Respuesta

14

Se puede hacer, como a continuación: se está trabajando para mí. debe crear una actividad para iniciar este servicio, así: this.startService (intención)

public class TTSService extends Service implements TextToSpeech.OnInitListener{ 

private String str; 
private TextToSpeech mTts; 
private static final String TAG="TTSService"; 

@Override 

public IBinder onBind(Intent arg0) { 

    return null; 
} 


@Override 
public void onCreate() { 

     mTts = new TextToSpeech(this, 
       this // OnInitListener 
       ); 
     mTts.setSpeechRate(0.5f); 
     Log.v(TAG, "oncreate_service"); 
    str ="turn left please "; 
    super.onCreate(); 
} 


@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    if (mTts != null) { 
      mTts.stop(); 
      mTts.shutdown(); 
     } 
     super.onDestroy(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 


    sayHello(str); 

    Log.v(TAG, "onstart_service"); 
    super.onStart(intent, startId); 
} 

@Override 
public void onInit(int status) { 
    Log.v(TAG, "oninit"); 
    if (status == TextToSpeech.SUCCESS) { 
      int result = mTts.setLanguage(Locale.US); 
      if (result == TextToSpeech.LANG_MISSING_DATA || 
       result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       Log.v(TAG, "Language is not available."); 
      } else { 

       sayHello(str); 

      } 
     } else { 
      Log.v(TAG, "Could not initialize TextToSpeech."); 
     } 
} 
private void sayHello(String str) { 
     mTts.speak(str, 
       TextToSpeech.QUEUE_FLUSH, 
       null); 
} 
} 
+0

Ayudó mucho, gracias. –

Cuestiones relacionadas