【问题标题】:How to identify which MP3 file ended in MediaPlayer.OnCompletionListener?如何识别以 MediaPlayer.OnCompletionListener 结尾的 MP3 文件?
【发布时间】:2012-03-01 00:27:39
【问题描述】:

在我的 ativity 的 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 文件并根据播放的文件以不同方式处理完成。 /p>

有没有办法从MediaPlayer 参数中判断哪一段结束了?

【问题讨论】:

标签: android android-mediaplayer


【解决方案1】:

回调 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 文件 完成了播放。
  • p 播放 p.mp3,q 播放 q.mp3。如果玩家 p (q) 停止,您现在知道 p.mp3 (q.mp3) 完成了。
  • @Raz +1 进行澄清。不需要子类等,但 qp 在类级别必须是“全局”的(即数据成员,而不是自动变量)。
  • 尝试调用它们(全局变量)或(方法变量)而不是(数据成员)和(自动变量)。对于变量的不同范围,有大量可互换的描述符,但是(全局)和(方法)几乎是普遍理解的。
【解决方案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 的文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多