我想在我的应用中开发文字转语音(TTS)功能。它必须在Service
内实施,因为用户可能会留下"详细信息" Activity
并回到" main" Activity
或者甚至离开我的应用,它仍然应该大声说出来。由于Oreo为服务引入了一些背景限制,我必须支持4.0+,我必须使用JobIntentService
问题是,即使我使用JobIntentService
(在我的代码onHandleWork
中),TTS也有异步实现而startForeground
在showSpeakingNotification
完成工作后被杀死1} p>
有趣的是,当我在onHandleWork
之后的一个断点之后,就说出了#Out'方法或只是取消注释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();
}
}
答案 0 :(得分:1)
取消注释Thread.sleep服务正在工作并阅读我的文本
当您添加Thread.sleep(10000);
时,它会阻止当前线程,但它不会响应您的语音。当您发表评论时,当前线程可以自由阅读您的数据
问题是如何防止&#34;自动查杀&#34;我的服务 实际上正在运行,但在内部使用异步功能?
注意可能。您可以使用Foreground Service来满足您的要求。请参阅此SO以实现前台服务