您如何检测声音文件何时完成?
Posted
技术标签:
【中文标题】您如何检测声音文件何时完成?【英文标题】:How do you detect when a sound file has finished? 【发布时间】:2011-11-14 03:26:33 【问题描述】:我正在广播接收器活动中使用此代码播放声音文件:
notification.sound = Uri.parse("android.resource://emad.app/raw/seven_chimes");
我想检测此文件何时播放完毕。
我尝试了这样的循环,但我认为这仅对媒体播放器有好处,因为即使我确定声音文件仍在播放,它总是 = false:
/*
* Stay here until the chime sound is finished.
*/
while (manager.isMusicActive())
你能告诉我应该用什么来代替manager.isMusicActive()
吗?
【问题讨论】:
【参考方案1】:您可以使用 MediaPlayer 类并添加一个 Completion 侦听器,以便在声音播放完毕时激活
MediaPlayer mp = MediaPlayer.create(this,Uri.parse("android.resource://emad.app/raw/seven_chimes"));
mp.setOnCompletionListener(new OnCompletionListener()
@Override
public void onCompletion(MediaPlayer mp)
performOnEnd();
);
mp.start();
【讨论】:
嗨 Ronny,我尝试了代码,但收到一条错误消息:MediaPlayer is not applicable for the arguments (new OnCompletionListener())。 嗨 Emad,您需要添加 import android.media.MediaPlayer.OnCompletionListener;所以它会识别它。 嗨 Ronny,我添加了导入并且不得不将“this”更改为“context”,但在 OnCletionListener 行上仍然出现相同的错误。还缺少什么吗?谢谢。真的,埃马德 嗨,这很奇怪,因为它是一种非常严格的方法。您使用的 API 版本是什么?错误信息是什么?当您按 control+1(或 command + 1)时,Eclipse 的建议是什么?您可以将“this”作为参数传递,mp.setOnCompletionListener(this);它会建议您实现 OnCompletionListener 并且您可以将 onCompletion 方法添加到您的类中。希望它有所帮助:) 嗨 Ronny,它适用于 Android 1.6,并且在广播接收器活动中。我发现我还必须包括“import android.media.MediaPlayer.OnCompletionListener;”得到它没有错误。非常感谢帮忙。真的,埃马德【参考方案2】:不适用于广播接收器,但这对我当前使用 Kotlin 跟踪音频文件何时播放完毕的项目有效。
playButton.setOnClickListener
if (isPlaying)
pauseSound()
else
playSound()
mediaPlayer.setOnCompletionListener
playButton.text = "Play"
isPlaying = false
isPlaying 是布尔值,如果有人感到困惑,我会解释更多。希望它在未来对其他人有所帮助。编码愉快!
【讨论】:
【参考方案3】:尝试使用服务播放音乐.. 播放一次后,停止您的服务,您可以在 onDestroy() 服务方法上添加您的程序.. 希望对你有帮助:)
【讨论】:
嗨迈克尔,我也想试试你的方法。你能展示一个代码示例供我试用吗?谢谢。真的,埃马德以上是关于您如何检测声音文件何时完成?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode iOS:如何使用 AVFoundation 重置声音