2014-12-17 4 views
1

Мой код:Утилита UtteranceProgressListener не всегда называется «Текст в речь»?

import java.math.BigInteger; 
import java.security.SecureRandom; 
import java.util.HashMap; 
import java.util.Locale; 

import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.os.Build; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.speech.tts.UtteranceProgressListener; 
import android.widget.Toast; 

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) 
@SuppressLint("NewApi") 
public class MainActivity extends Activity { 
    public TextToSpeech tts; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     tts = new TextToSpeech(this, new ttsInitListener()); 
    } 
    @SuppressLint("TrulyRandom") class ttsInitListener implements OnInitListener { 

     @SuppressWarnings("deprecation") 
     @Override 
     public void onInit(int status) { 

      if (status == TextToSpeech.SUCCESS) { 
       tts.setLanguage(Locale.getDefault()); 
       if (!tts.isSpeaking()) { 
        SecureRandom random = new SecureRandom(); 
        String aa= new BigInteger(130, random).toString(32); 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, aa); 
        tts.speak("Hello Hello HEllo HEllo HEllo", 
          TextToSpeech.QUEUE_FLUSH, map); 
        tts.setOnUtteranceProgressListener(new ttsUtteranceListener()); 
       } 

      } else { 
       tts = null; 
       Toast.makeText(getApplicationContext(), 
         "Failed to initialize TTS engine.", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } 
    } 

    class ttsUtteranceListener extends UtteranceProgressListener { 

     @Override 
     public void onDone(String utteranceId) { 

      Toast.makeText(getApplicationContext(), "onDone", Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onError(String utteranceId) { 
      Toast.makeText(getApplicationContext(), "onError", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onStart(String utteranceId) { 
      Toast.makeText(getApplicationContext(), "onStart", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Когда говорят

tts.speak("Hello Hello HEllo HEllo HEllo", 
           TextToSpeech.QUEUE_FLUSH, map); 

Finish затем должен вызывать onDone(String utteranceId) метод ttsUtteranceListener класса. но ttsUtteranceListener не всегда достигается.

Почему этот класс не достиг?

+0

Вы отлаживали то, что было создано в 'String aa = new BigInteger (130, random) .toString (32);'? Попробуйте статический параметр один раз. –

+0

До этого я использую map.put (TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "abc"); –

+0

Попробуйте поместить 'map.put (TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,« привет »);' Поскольку ваш текст не содержит abc, но привет. –

ответ

2

Вы используете это:

String aa= new BigInteger(130, random).toString(32); 
HashMap<String, String> map = new HashMap<String, String>(); 
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, aa); //aa can be anything random, not necessary a word contained in your text 

UtteranceProgressListener является обработчиком событий, связанных с прогрессом высказывания через очередь синтеза.

onDone: Вызывается, когда высказывание успешно завершило обработку.

Вы должны попробовать использовать это:

HashMap<String, String> map = new HashMap<String, String>(); 
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "Hello"); 
tts.speak("Hello Hello HEllo HEllo HEllo", TextToSpeech.QUEUE_FLUSH, map); 
tts.setOnUtteranceProgressListener(new ttsUtteranceListener()); 

Тогда он будет уволен, когда произнесение Здравствуйте успешно завершена.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^