Android Текст в речь в сервисе не вызывает методы onDone / onStart - PullRequest
0 голосов
/ 12 января 2020

Уважаемые, у меня есть Text-To-Speech, реализованный службой в java android, у меня есть журналы во всех этих методах с Log.i, но ни один из этих методов не вызывается, когда я проверяю Logcat (onDone , onError, onStart), мне нужно знать, когда Text-to-speech имеет fini sh для вызова другой функции, это служебный код, это что-то не так?

public class TTSService extends Service implements TextToSpeech.OnInitListener {

    public static final String EXTRA_TEXT_TO_READ = "sin texto";

    private TextToSpeech tts;
    private String word;
    private boolean isInit;
    private Handler handler;
    Locale locale = new Locale("es", "ES");
    private String TAG = "MY_SERVICE";
    @Override
    public void onCreate() {
        try{
            super.onCreate();
            tts = new TextToSpeech(getApplicationContext(), this);
            handler = new Handler();
        }catch (Exception e){
            Log.i(TAG, "catch onCreate");
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
       try{
           handler.removeCallbacksAndMessages(null);

           word = intent.getStringExtra(TTSService.EXTRA_TEXT_TO_READ);

           if (isInit) {
               speak();
           }

          /* handler.postDelayed(new Runnable() {

               @Override
               public void run() {
                   stopSelf();
               }
           }, 90*1000);*/

           return TTSService.START_NOT_STICKY;
       }catch (Exception e){
           Log.i(TAG, "catch onStartCommand");
           return TTSService.START_NOT_STICKY;
       }
    }

    @Override
    public void onDestroy() {
        if (tts != null) {
            Log.i(TAG,"OnDestroy");
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }

    @Override
    public void onInit(int status) {
        try{
            if (status == TextToSpeech.SUCCESS) {
                int result = tts.setLanguage(locale);
                if (result != TextToSpeech.LANG_MISSING_DATA && result != TextToSpeech.LANG_NOT_SUPPORTED) {
                    speak();
                    isInit = true;
                }

                tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                    @Override
                    public void onDone(String utteranceId) {
                        Log.i(TAG, "Done");
                    }

                    @Override
                    public void onError(String utteranceId) {
                        Log.i(TAG, "onError");
                    }

                    @Override
                    public void onStart(String utteranceId) {
                        Log.i(TAG, "onStart");
                    }
                });

            }

        }catch (Exception e){
            Log.i(TAG, "catch onInit");
        }
    }

    private void speak() {
       try{
           if (tts != null) {
               tts.speak(word, TextToSpeech.QUEUE_FLUSH, null);
           }
       }catch (Exception e){
           Log.i(TAG, "catch speak");
       }
    }

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

}
...