android MediaPlayer

今天要做背景音乐,需要设置几首供用户选择。开始用的service,但是这个我只会设置一首。。于是掺杂了mediaplayer。


开始遇到

报错 error(1,-2147483648)  百度了下是 未知错误。。

后来遇到重复声明,空指针错误 等等。。
我的音乐都在layout的raw目录下,需要从这里读取。
开始使用的mp.setDataSource("/"); 后来知道了这个方法是用来读取sdcard路径的。
要读取raw下的文件,需要酱紫:mp = MediaPlayer.create(this, R.raw.amazinggrace);

插入的代码就这几行吧
private MediaPlayer mp;
mp = MediaPlayer.create(this, R.raw.amazinggrace);
Button music2 = (Button)musicoptionview.findViewById(R.id.music2);
music2.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Toast.makeText(FreeCreate.this, "amazing grace,奇异恩典", Toast.LENGTH_SHORT).show();
dialog.dismiss();
try{
// mediaPlayer.reset();
//mp.setDataSource("R.raw.amazinggrace");

   
//mp.prepare();  //create方法已经帮你create了。不去掉会报错的
              mp.start();
}catch(Exception e){
    e.printStackTrace();
    }
           
}
});

期间又遇到了一个错误 mediaplayer start called in state 64 
这个错误发生在我停止播放,第二次播放就出错了。
原因是第一次create的时候自动prepare 但是第二次需要自己调用prepare()了。
所以写了一个 count计数,第一次是mp.start(),第二次就是 mp.prepare();   mp.start().
-------------------------------------------分割线--------------------------------------------------
上面这个计数方法失败了,我没明白为什么多次点击之后 count每次都打印2.。2.。。。2.。。。为什么不加呢。。。
后来又查找相关资料,最后在mp.stop(); 后面添加语句 mp.prepareAsync();
目前不会出错了,但是 点击之后再第二次播放的时候,是接着上次播放的,怎样从头开始重新播放呢,继续摸索。。。。TAT
----------------------------------------分割线----------------------------------------------------------------
实在是不懂了,最后强行用调整进度的方式,回归到0.再stop,再prepare,根据下面这个图走的。总算勉强可以了。缺点是再次点击播放
的时候还会听到一秒钟上次播放到那儿的声音。
图片来自安卓巴士:
android MediaPlayer_第1张图片

PS:  安卓巴士上某篇文章挺好的额,详细: 摘录如下:
有两种方法(同步和异步)可以使MediaPlayer对象进入Prepared状态:要么调用prepare()方法(同步),此方法返回就表示该MediaPlayer对象已经进入了Prepared状态;要么调用prepareAsync()方法(异步),此方法会使此MediaPlayer对象进入Preparing状态并返回,而内部的播放引擎会继续未完成的准备工作。当同步版本返回时或异步版本的准备工作完全完成时就会调用客户端程序员提供的OnPreparedListener.onPrepared()监听方法。可以调用MediaPlayer.setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)方法来注册OnPreparedListener.

图和这段文字来自同一片文章,附链接: http://www.apkbus.com/forum.php?mod=viewthread&tid=52912

PPS:   CSDN这位朋友ddna的博文怒赞  ,大家去读一下这篇文章,就会了解基本
用法了。写的很详细,包括读取路径的三种方法。对播放器的主要控制方法 and so on~~
链接: http://blog.csdn.net/ddna/article/details/5176233

你可能感兴趣的:(android MediaPlayer)