【发布时间】:2018-06-07 08:15:37
【问题描述】:
我想在我的应用中开发文本转语音 (TTS) 功能。它必须在Service 内部实现,因为用户可能会留下“详细信息”Activity 并返回“主要”Activity 甚至离开我的应用程序,它仍然应该大声说出文本。由于 Oreo 为服务引入了一些后台限制,我必须支持 4.0+ 我必须使用JobIntentService
问题是 TTS 具有异步实现,JobIntentService 在 onHandleWork 完成其工作后被杀死,即使我使用 startForeground(在我的代码中为 showSpeakingNotification)
有趣的是,当我在 'speakOut' 方法之后在 onHandleWork 中设置断点或只是取消注释 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();
}
}
【问题讨论】:
标签: android android-service text-to-speech jobintentservice