我有一个短信广播接收器,它会在传入短信时向用户读出文本。当应用程序正在阅读第一个文本时收到另一个文本时会出现问题。因此,为了防止多个sms进入,我想在主活动中设置一个标志,表明它正在读取文本并取消新的短信接收器。关于如何做到这一点的任何想法?
答案 0 :(得分:0)
此处来自TTS android Docs:
stop()
Interrupts the current utterance (whether played or rendered to file) and discards other utterances in the queue.
呼叫停止后,继续播放您的新演讲。
更新:另一种选择,只是检查引擎是否已经在说话,如果是,那么就不要做任何事情 。 来自文档:
isSpeaking()
Checks whether the TTS engine is busy speaking.
更新: 你需要传递你提出数据标志的意图,告诉其他新的活动是什么
所以,如果你打算一个明确的意图来启动一个类,你可能会这样调用它(用你提到的启动标志):
Intent intent = new Intent(context,MyActivity.class); startActivity(意向);
用它传递一个额外的标志:
Intent intent = new Intent(context, MyActivity.class);
intent.putExtra("isSpeaking", tts.isSpeaking());
startActivity(intent)
然后在onCreate的已启动活动中,只需读取意图中的数据:
Intent i = getIntent();
Bundle extras = i.getExtras();
boolean flag= extras.getBoolean("isSpeaking");
如果不起作用,那么只需在活动中使用静态标志即可。我不确定它的线程是否安全所以我也会在这里使用volatile,但像static volatile boolean isSpeaking;
更新:我会删除你在启动意图上的标志(即Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP),然后在活动覆盖onNewIntent()中,并检查一个布尔标志。以我上面描述的相同方式启动intent,在bundle中发送一个布尔额外标志。
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
if(intent.getBooleanExtra("isSpeaking",false))
{
//do some things here like ignore speaking or stop TTS etc
}
}