研究一个只有三首歌的简易音乐播放器
Tips:Things you need to know first.
-
什么是URI?
URI =Uniform Resource Identifier (统一资源标识符)
是用于标识某一互联网资源名称的字符串
主要包括三个部分
①主机名
②标识符
③相对URI
eg:http://b.c/d/e.f (假设b.c是一个可用的域名,e.f是一个标准的文件)
这是一个可通过HTTP协议访问的资源,位于主机b.c上,通过URI中的字符串"/d"访问主机上的"d"文件夹,通过"e.f"请求访问主机上"/d/e.f"这个文件。 -
MediaPlayer在使用时的一个注意事项
在使用MediaPlayer播放一段流媒体的时候,需要使用prepare()或prepareAsync()方法把流媒体装载进MediaPlayer,然后才可以调用start()播放流媒体。那最好使用prepaAsync()(异步方式)装载流媒体资源,主要避免还没有装载完成就调用start()而产生报错的情况。 -
附上一些MediaPlayer方法介绍在后方;
进入正文
首先是xml布局效果,
出现问题:播放按钮需要点击三次(即开始-暂停-开始)后,才开始播放音乐
上图为来自app的抗议,也许某天可以试试开个子线程工作吧。
public void play()
{
try {
if (mediaPlayer == null)
{
mediaPlayer = MediaPlayer.create(this, songs[currentIndex]);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync(); //使用异步的方式装载流媒体资源
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
Log.d("MyBinder", "play the music");
} else if((mediaPlayer != null) && (!mediaPlayer.isPlaying())){ //暂停后再开始
mediaPlayer.seekTo(currentPosition);
mediaPlayer.start();
Log.d("MyBinder", "start ");
}
}catch(Exception e)
{
e.printStackTrace();
}
}
在以上代码中,第一次点击开始按钮时,并没有进入if(mediaPlayer == null)中。尚未解决,如果解决了会写在评论里。
附上源代码:
/代码可能存在很多冗余部分,暂时只求达到效果/
MusicService:
在我刚开始使用mediaPlayer.pause()的时候,好像没有从暂停的地方开始播放,所以我又使用了MediaPlayer的getCurrentPosition()与SeekTo(); 来实现我想要的效果。
//别人的pause()都可以完美实现,wired!
import android.app.Service;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import andro