我正在使用MediaPlayer示例,以便从Internet位置流式传输音频文件。音频播放器处于单独的Activity中。用户可以从音频文件列表中进行选择,然后进入此活动以播放音频。
现在,用户可以返回到上一个Activity(带有列表)并选择另一个音频文件。在这种情况下,我想停止正在播放的任何其他音频,并开始播放所选的新音频。
有没有什么方法可以让我知道一个音频文件是否正在播放,而不必保留MediaPlayer对象?
谢谢
编辑
我确实找到了如何知道音频是否正在播放的方法。我们可以通过使用AudioManager对象并调用isAudioPlaying()来实现。如果正在播放任何音频,则将返回true。
现在另一个问题,**我如何停止正在播放的音频?**我没有创建用于启动音频的MediaPlayer对象的示例(因为用户已经离开Activity一次,并带着Activity的新对象和MediaPlayer的新示例返回)
6条答案
按热度按时间wvt8vs2t1#
您需要在
MediaPlayer
示例上调用stop()
。要在您的应用程序中实现此功能,您需要:onDestroy()
中)中调用stop()
使用
Service
将允许您的代码在Activity生命周期之外继续运行,并且是持久化MediaPlayer
对象的唯一方法,就像您在这种情况下需要的那样。或者,您也可以创建
Application
的自定义子类并将MediaPlayer
存储在那里,但使用Service
被认为是更好的做法。fdx2calv2#
我发现了使用反射检查音频流(AudioManager.STREAM_RING,AudioManager.STREAM_NOTIFICATION等)当前是否忙碌的方法:
x8goxv8g3#
这里有一些方便的代码,可以让你在播放完音频之前一直处于睡眠状态:
4smxwvx54#
@lostintransit“使用服务、静态变量还是单例类更好?更好的设计方案是什么?“
我觉得你想要的是服务。内置的媒体播放器和Pandora的应用程序都使用一项服务来确保音乐不与Activity生命周期相关联。
如果我理解你为什么要使用单例或静态,我不认为它会实现你想要的。singleton/static只在Linux中的单个进程中执行。如果您启动Activity,然后关闭它,然后再次启动它,它们将在不同的进程中运行。
rbpvctlc5#
试试这个...
其中mp1是
MediaPlayer
a7qyws3x6#
参数给予AudioManager.STREAM_RING即可
}