Я хочу разработать функцию преобразования текста в речь (TTS) в моем приложении.Это должно быть реализовано внутри Service
, потому что пользователь может оставить «детали» Activity
и вернуться к «основному» Activity
или даже покинуть мое приложение, и он все равно должен произносить громкий текст.Так как Oreo ввел некоторые фоновые ограничения для сервисов, и я должен поддерживать 4.0+, я должен использовать JobIntentService
Проблема в том, что TTS имеет асинхронную реализацию и JobIntentService
убивается сразу после того, как onHandleWork
завершает свою работу, дажекогда я использую startForeground
(в моем коде showSpeakingNotification
)
Самое смешное, что когда я, но точка останова внутри onHandleWork
после метода 'speakOut' или просто раскомментирую Thread.sleep
служба работает и читает моитекст (и уведомление переднего плана присутствует).
Вопрос в том, как предотвратить автоматическое уничтожение моей службы, когда она действительно запущена, но с использованием асинхронной функции внутри?
@Override
protected void onHandleWork(@NonNull Intent intent) {
if (ACTION_SPEAK.equals(intent.getAction()) && intent.hasExtra(EXTRA_TEXT_ARRAY)) {
ArrayList<String> textArr = intent.getStringArrayListExtra(EXTRA_TEXT_ARRAY);
showSpeakingNotification(textArr.get(0));
if (ttsInitialized)
speakOut(textArr);
else if (ttsInitListener != null)
ttsInitListener.setPendingText(textArr);
} else if (ACTION_STOP_SPEAKING.equals(intent.getAction())) {
if (ttsInitialized && tts.isSpeaking())
tts.stop();
}
try {
//Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}