相信大家窦已经知道经典的mediaplayer的例子, 比如这里就有一个:http://www.iteye.com/topic/568547用service调用的时候,我有一个问题:当你点击“播放”, 音乐开始响起, 一会你再点击“播放”一下, 这时音乐会再起一次, 也就是这时背景音乐是两个不同时间的音乐同时在唱; 这时,你点击“停止”, 只有同时播放的两个音乐的其中一个声音停下来了, 另一个仍然继续在唱, 你再继续点“停止”也不会有效果了。请问,如何解决这个问题?

解决方案 »

  1.   

    我也遇到过这个问题,其实是挺简单的。你得熟悉service的生命周期,我用的是startService。你必须把MediaPlayer mPlayer = new MediaPlayer()放在onCreate()方法中,而不能放到startCommand()方法里,因为这样的话就会每次都创建一个新的MediaPlayer对象,当然就播放很多首歌了。楼主要做的就是调整下部分代码的位置,
      

  2.   

    一次stop关掉所有播放不符合需求么? 这样还容易实现
      

  3.   

    使用MediaPlayer播放音频文件资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。为何不用SoundPool呢?
    http://blog.csdn.net/ch_984326013/article/details/6615707
      

  4.   

    为什么要这样设计呢,就应该播放一首歌曲的。不过如果你要同时播放多首歌,然后点击一下按钮就关掉一首歌的话,也可以的,但是你得改下代码。不能用MediaPlayer mp = new MediaPlayer(),因为这样mp只能使得mp指向一个MediaPlayer了,其他已经创建的MediaPlayer对象就不能够引用到了。你可以这样,构造一个栈结构,每次new 了一个MediaPlayer对象后就把它压入到那个栈里。然后你要关闭一首歌时候,你就出栈得到那个对象,调用它的stop方法。我觉得这样会比较合理。不知道是不是楼主要的答案