2013-08-08 29 views
9

Bu yüzden, temelde tam olarak aynı konuşma koduyla özgün bir aktiviteye sahibim, ancak bu kodu başka bir etkinliğe taşımak zorunda kaldım. Anlayabileceğim tek fark, konuşma metninin eşzamansız bir yöntemde çağrılmamasıdır. Konuşma, speechFull yönteminde gerçekleşir.Speak, TTS Engine'e Bağlı Değil Başarısız Oldu

Ben android gelişme yeniyim
speak failed: not bound to TTS engine 
isSpeaking failed: not bound to TTS engine 

, bu sorunun diğer çözümlerle aradık ve gerçekten mayın çalışması için bir çözüm bulmak gibi olamaz: Bu hataları olsun. Herhangi bir tavsiye veya yardım takdir edilir.

Kodu:

package com.example.webview; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.speech.tts.TextToSpeech; 
import android.text.method.ScrollingMovementMethod; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class ReadOut extends Activity implements TextToSpeech.OnInitListener, OnClickListener { 


    boolean paused = false; 
    String leftToRead = null; 
    String res = null; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.read_out); 
     Intent intent = getIntent(); 
     res = intent.getExtras().getString("response"); 
     TextView textv = (TextView) findViewById(R.id.textView1); 
     textv.setText(res); 
     textv.setMovementMethod(new ScrollingMovementMethod()); 
     android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     textv.setHeight((int)(display.getHeight()*0.76)); 
     leftToRead = speakFull(res); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     return true; 
    } 

    public String speakFull(String text){ 
     System.out.println("Speaking: " + text); 
     TextToSpeech tts = new TextToSpeech(this, this); 
     System.out.println("Speaking"); 
     String[] sentences = text.split("\n|\\.(?!\\d)|(?<!\\d)\\."); // Regex that splits the body of text into the sentences of that body which are stored in a String array. 
     for(int i = 0; i < sentences.length; i++){ 
      if(!tts.isSpeaking() && !paused){ 
       System.out.println("Speaking: " + i); 
       tts.speak(sentences[i], TextToSpeech.QUEUE_FLUSH, null); 
      }else if(paused){ 
       System.out.println("Paused"); 
       String paused = ""; 
       for(int j = i - 1; j < sentences.length; j++){ 
        paused += sentences[j]; 
       } 
       return paused; 
      }else{ 
       i--; 
      } 
      if(i == sentences.length - 1){ 
       return "Message 001: Complete"; 
      } 
     } 
     return null; 
    } 

    @Override 
    public void onInit(int arg0) { 
     // TODO Auto-generated method stub 

    } 

    public void clickPause(View v){ 
     if(paused){ 
      paused = false; 
      Button b = (Button) findViewById(R.id.button1); 
      b.setText("Play"); 
     }else{ 
      paused = true; 
      Button b = (Button) findViewById(R.id.button1); 
      b.setText("Pause"); 
      if(leftToRead == null){ 
       leftToRead = speakFull(res); 
      }else{ 
       leftToRead = speakFull(leftToRead); 
      } 
     } 
    } 

    @Override 
    public void onClick(DialogInterface arg0, int arg1) { 
     // TODO Auto-generated method stub 

    } 

} 

cevap

12

yalnızca (onInit sonra speak() çağırabilir) denirdi. Yani (onInit için onCreate da tts kodu konuşmak hareket)

@Override 
public void onInit(int status) { 
    if (status == TextToSpeech.SUCCESS) { 
     leftToRead = speakFull(res); 

} 

ve bu işleri gerçek boolean paused = true;

+0

için duraklama başlatmak, bir sorum şimdi olsa var. Bazen ikinci aktiviteyi ve tüm kullanıcı arayüzünü gösterecek ve bazen siyah bir ekrana gidip okumaya başlayacak ve android sürekli programın yanıt vermediğini söyleyecektir. Nedenini biliyor musun? –

+0

Yorumunuzdaki dilbilgisini ve yazımınızı yeniden yazabilir ve düzeltebilirsiniz, çünkü sorunuzu anlamıyorum. –

+0

Benim için de çalıştım. Teşekkürler! –