【问题标题】: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()吗?

【问题讨论】:

    标签: android while-loop


    【解决方案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() 服务方法上添加您的程序.. 希望对你有帮助:)

      【讨论】:

      • 嗨迈克尔,我也想试试你的方法。你能展示一个代码示例供我试用吗?谢谢。真的,埃马德
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2012-06-30
      相关资源
      最近更新 更多