如何在 MediaPlayer.OnCompletionListener 中识别哪个 MP3 文件已结束?

9

在我的活动的onCreate()方法中,我设置了一个MediaPlayer.OnCompletionListener监听器,然后播放一个MP3文件:

    MediaPlayer p = MediaPlayer.create(this, R.raw.intro);
    p.setOnCompletionListener(this);
    p.start();      

当游戏结束时,我就在以下事件中处理:

    public void onCompletion(MediaPlayer mp) {
      // handle completion
    }

很好,但现在我想播放两个不同的MP3文件,并根据播放的哪个文件来不同地处理完成。

有没有办法从MediaPlayer参数中判断哪个文件已经结束?


2个回答

4
回调函数 public void onCompletion(MediaPlayer mp) 会给您提供 MediaPlayer 的引用。
public void onCompletion(MediaPlayer mp) {
    if (mp.equals(p){
        //do action for media player p

    } else if (mp.equals(q)){
        //do action for media player q
    }
}

我不是在寻找识别哪个媒体播放器对象/实例运行,而是想知道哪个mp3文件已经播放完毕。 - ateiob
2
p 播放 p.mp3,q 播放 q.mp3。如果播放器 p(q)停止,那么你现在知道 p.mp3(q.mp3)已经完成了。 - Rayne
@Raz 感谢您的澄清。不需要子类等,但是 qp 必须在类级别上是“全局”的(即数据成员,而不是自动变量)。 - ateiob
尝试称它们为(全局变量)或(方法变量),而不是(数据成员)和(自动变量)。有许多可互换使用的描述符用于不同范围的变量,但(全局)和(方法)几乎被普遍理解。 - edthethird

2
OnSetCompletionListener被触发时会识别出哪个MediaPlayer已经完成。对于mp3文件,您的数据模型应该表示为一个包含多个MediaPlayer对象的列表(对象可以从MediaPlayer的子类创建),这些对象应该知道它们正在播放或已经完成播放的mp3文件。参见http://davanum.wordpress.com/2007/12/29/android-videomusic-player-sample-from-local-disk-as-well-as-remote-urls/以获取示例。对于模型,请创建一个继承自MediaPlayer的类。在新类中维护mp3文件名 - 如'fn'。因此,p.fn将为您提供mp3文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接