今儿用android的MediaPlayer实现几种音乐播放的方式:
.读取本地音乐文件
.读取手机内存里面的音乐文件
.读取网络音乐文件
首先我们来看第一种,所有的xml布局都是这一个:
<SeekBar
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:id="@+id/sb_main_bar"
/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="isPlayOrPause"
/>
读取本地的音乐文件:在安卓的工程的res下建立一个raw的文件,复制一个音乐文件进去,紧接着就是:
final ImageButton imageButton=(ImageButton) view;//视图的button
if (mediaPlayer==null){
//播放内地文件
mediaPlayer = MediaPlayer.create(this, R.raw.haunted);
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐总时长
int duration= mediaPlayer.getDuration();
//设置音乐最大值
sb_main_bar.setMax(duration);
}else if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}在此之前还要给进度条设置监听
sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);
//给进度条设置监听事件
sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress= seekBar.getProgress();
//设置当前的播放位置
mediaPlayer.seekTo(progress);
}
});
设置进度条可拉动,并跟随音乐一起快进,就需要用到一个线程,这里我写的是内部类线程
class mythread extends Thread{
@Override
public void run() {
super.run();
while (sb_main_bar.getProgress()<=sb_main_bar.getMax()){
//获取音乐当前播放的时间
int position= mediaPlayer.getCurrentPosition();
sb_main_bar.setProgress(position);
}
}
}此时最简单的播放内地音乐就完成了。
下面我们来看看从手机内容中播放音乐文件,改变不大,看代码
final ImageButton imageButton=(ImageButton) view;//视图的button
if (mediaPlayer==null){
//播放内地文件
// mediaPlayer = MediaPlayer.create(this, R.raw.haunted);
mediaPlayer=new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
//播放内存卡中的图片
mediaPlayer.setDataSource(this,Uri.parse("file://mnt/sdcard/kgmusic/swera.mp3"));
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
//设置准备完成的监听
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐总时长
int duration= mediaPlayer.getDuration();
//设置音乐最大值
sb_main_bar.setMax(duration);
new mythread().start();
}
});
}else if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}小结下内存播放音乐文件的几点:
1.设置音乐类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
2、读取手机位置的路径:这里先是有必要说明下手机内存和内存卡,着两者一个是手机的内置存储,后者是手机外置存储,外置存储指的是后期插入到手机中的内存卡,一般来说,读取手机里面的资源的时候,第一个访问的,默认的是读取手机内置存储的信息,所以路劲因写手机内置存储卡的路劲,小编就是在这两者的路径上耗费了一两个小时,因为读的是手机外置存储卡的信息,一直播放不了音乐 Uri.parse("file://mnt/sdcard/kgmusic/swera.mp3")3、播放开始前要先准备:
mediaPlayer.prepare();
这就是播放内存音乐需要注意的东西.
最后一钟就是网络读取,这里我是用Tomcat作为服务器的,代码也没多大改变无非换了路径、开始前的准备
//播放网络的音乐
mediaPlayer.setDataSource(this,Uri.parse("http://192.168.23.1/taly,map3"));异步准备
mediaPlayer.prepareAsync(); final ImageButton imageButton=(ImageButton) view;//视图的button
if (mediaPlayer==null){
//播放内地文件
// mediaPlayer = MediaPlayer.create(this, R.raw.haunted);
mediaPlayer=new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
//播放网络的音乐
mediaPlayer.setDataSource(this,Uri.parse("http://192.168.23.1/taly,map3"));
mediaPlayer.prepareAsync();
// mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
//设置准备完成的监听
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐总时长
int duration= mediaPlayer.getDuration();
//设置音乐最大值
sb_main_bar.setMax(duration);
new mythread().start();
}
});
}else if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}这就是三种不同的播放方式,有兴趣者还可以进行改造,比如给进度条添加时间,还有就是完善其界面.....
希望这些对大家有帮助!
本文介绍了使用Android的MediaPlayer组件实现三种音乐播放方式:读取本地音乐文件、读取手机内存中的音乐文件以及读取网络音乐文件。通过设置进度条与音乐同步,详细讲解了实现过程,对开发者有一定帮助。

2465

被折叠的 条评论
为什么被折叠?



