为什么播放声音的活动会干扰用户界面?

问题描述

用户点击该通知时,我想显示一个通知并播放声音。当我使用活动播放声音时,它会以某种方式起作用,就像我对这个问题的答案写的一样:How can I create a notification that plays an audio file when being tapped?在这个问题和答案中,还有源代码显示了我如何创建通知以及如何我的PlaySoundActivity的样子。

但是,我已经意识到,在播放声音时,我的主应用程序的外观会发生变化,并且如果不关闭该应用程序,它将无法恢复。

我已经从“标签活动”项目模板中创建了我的应用程序。

启动后的外观如下:

Application like I expect it to be

这是我轻按声音通知时的外观(这些部分已消失):

"Disturbed" user interface

谁能解释为什么会这样?使用活动播放声音是否错误?但是,当我使用服务时在这里不起作用,我什么也听不到!该怎么解决

解决方法

根据Android开发者参考,“几乎所有活动都与用户交互,因此Activity类负责为您创建一个窗口,您可以在其中放置带有setContentView(View)的UI”。

我没有这样做。因此,显示了一个新窗口,但没有任何内容。

播放声音的更好解决方案是使用PlaySoundService(服务!!!)而不是活动。它包含与活动几乎相同的代码,但是使用PendingIntent.getService(...)而非PendingIntent.getActivity(...)创建挂起的意图。使用错误的方法不会导致明显的错误消息,但是该服务将无法正常工作。