Android MediaPlayer的问题

假设我有4个音乐文件放在res/raw下,界面上四个按键,一个按键放一首音乐,我每个按键处理函数中都用了create方法,那么如果四个按键都按了一遍是不是就有4个Medi... 假设我有4个音乐文件放在res/raw下,界面上四个按键,一个按键放一首音乐,我每个按键处理函数中都用了create方法,那么如果四个按键都按了一遍是不是就有4个MediaPlayer对象且有三个失去了指针指向他们无法释放吧,求解! 展开
 我来答
QQMSD8
2015-12-10 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部

Android的MediaPlayer包含了Audio和video的播放功能

关于MediaPlayer的使用方式: 


  1. 如何获得MediaPlayer实例:
    可以使用直接new的方式:
    MediaPlayer mp = new MediaPlayer();
    也可以使用create的方式,如:
    MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了


2.如何设置要播放的文件:

MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("mp3或者mp4的地址");


3。 MediaPlayer常用API

MediaPlayer的setDataSource一共四个方法:
setDataSource (String path) 
setDataSource (FileDescriptor fd) 
setDataSource (Context context, Uri uri) 
setDataSource (FileDescriptor fd, long offset, long length)


4.对播放器的主要控制方法:

Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:


1.prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。

2. start()是真正启动文件播放的方法。
3.pause()和stop()比较简单,起到暂停和停止播放的作用。

4.seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
5.release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。

6.reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。

Storm代理
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企... 点击进入详情页
本回答由Storm代理提供
DYFleoo
2013-04-08
知道答主
回答量:10
采纳率:0%
帮助的人:11.8万
展开全部
你这样操作肯定会内存泄漏,不知道你的需求是什么。根据你的描述,大概有两种可能,
一:点击每个按钮换一首音乐
在点击监听函数中来进行判断此时mediaplayer是否已经创建,类似为
if (mMediaPlayer == null){
//创建对象
}
然后判断是否如果正在播放先暂停一下,重新设置播放的歌曲DataSource,然后再播放。总体思想就是创建一个MediaPlayer对象来利用其生命周期中的stop和play进行切换歌曲。
二:同时播放四首歌曲
这就要求创建四个全局的MediaPlayer对象,然后每点击一次,创建一个,与上面相同,不同的是每个button对应相应的MediaPlayer对象。
最后记得要释放资源哦。要不然可能会抛异常或内存泄漏。
祝你好运。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式