关于android mediaplay的调用问题

maqiutian 2011-09-10 09:27:32
相信大家窦已经知道经典的mediaplayer的例子, 比如这里就有一个:http://www.iteye.com/topic/568547

用service调用的时候,我有一个问题:

当你点击“播放”, 音乐开始响起, 一会你再点击“播放”一下, 这时音乐会再起一次, 也就是这时背景音乐是两个不同时间的音乐同时在唱; 这时,你点击“停止”, 只有同时播放的两个音乐的其中一个声音停下来了, 另一个仍然继续在唱, 你再继续点“停止”也不会有效果了。

请问,如何解决这个问题?
...全文
348 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
maqiutian 2011-10-07
  • 打赏
  • 举报
回复
非常感谢! 你的这个设计应该可行, 或者起线程也是可以的。
念茜 2011-09-11
  • 打赏
  • 举报
回复
一次stop关掉所有播放不符合需求么? 这样还容易实现
ch_984326013 2011-09-11
  • 打赏
  • 举报
回复
使用MediaPlayer播放音频文件资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。为何不用SoundPool呢?
http://blog.csdn.net/ch_984326013/article/details/6615707
stonebreakers 2011-09-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maqiutian 的回复:]

聪明! 不过, 如果就是想支持这种启动两个音乐,而又想两次关掉这同时播放的音乐可不可能呢?
[/Quote]为什么要这样设计呢,就应该播放一首歌曲的。不过如果你要同时播放多首歌,然后点击一下按钮就关掉一首歌的话,也可以的,但是你得改下代码。不能用MediaPlayer mp = new MediaPlayer(),因为这样mp只能使得mp指向一个MediaPlayer了,其他已经创建的MediaPlayer对象就不能够引用到了。你可以这样,构造一个栈结构,每次new 了一个MediaPlayer对象后就把它压入到那个栈里。然后你要关闭一首歌时候,你就出栈得到那个对象,调用它的stop方法。我觉得这样会比较合理。不知道是不是楼主要的答案
maqiutian 2011-09-10
  • 打赏
  • 举报
回复
聪明! 不过, 如果就是想支持这种启动两个音乐,而又想两次关掉这同时播放的音乐可不可能呢?
stonebreakers 2011-09-10
  • 打赏
  • 举报
回复
我也遇到过这个问题,其实是挺简单的。你得熟悉service的生命周期,我用的是startService。你必须把MediaPlayer mPlayer = new MediaPlayer()放在onCreate()方法中,而不能放到startCommand()方法里,因为这样的话就会每次都创建一个新的MediaPlayer对象,当然就播放很多首歌了。楼主要做的就是调整下部分代码的位置,

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧