对MediaPlayer,简易的音乐播放器

来源:互联网 发布:什么软件外卖货到付款 编辑:程序博客网 时间:2024/05/06 07:52

MediaPlayer 是用来播放音频,视频和流媒体的类

reset()重置MediaPlayer的对象,清空对象的所有设置。

setDataSource(path)设置播放文件的路径。

getDuration()获得播放文件的长度。

getCurrentPosition()获得播放的进度。

seekTo(int)  调节音频文件的播放进度。

prepare() 播放前需调用的方法。

start() bofang

package musicplayer;import java.io.File;import java.io.FilenameFilter;import java.io.IOException;import com.example.musicplayer.R;import android.app.AlertDialog;import android.content.DialogInterface;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;import android.widget.TextView;import roboguice.activity.RoboActivity;import roboguice.inject.InjectView;public class MainActivity extends RoboActivity{@InjectView (R.id.musicname) TextView musicnameView;@InjectView (R.id.previous)  ImageButton prebtn;@InjectView (R.id.playorstop)ImageButton playorsotpbtn;@InjectView (R.id.next)  ImageButton nextbtn;@InjectView (R.id.seekBar1)  SeekBar musicSeek;@InjectView (R.id.max)  TextView max;@InjectView (R.id.current)   TextView current;String [] musicFile;MediaPlayer mediaPlayer;int i;boolean isPlay=false;boolean ispause=false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.musicplay);mediaPlayer=new MediaPlayer();//监听一首音乐结束后,自动播放下一首音乐mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {i++;prepareMusic();playMusic();}});//拖动进度条,改变音乐的播放进度musicSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {if(fromUser){mediaPlayer.seekTo(progress);}}});//音频文件的路径File file=new File(InitActivity.musicDir);//过滤仅读取MP3格式的文件musicFile=file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String filename) {return filename.endsWith(".mp3");}});musicnameView.setText(musicFile[0]);prepareMusic();//上一首音乐的按钮,prebtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(i!=0){i--;}else{i=musicFile.length-1;}musicnameView.setText(musicFile[i]);prepareMusic();if(isPlay){playMusic();}}});
<span style="white-space:pre"></span>//下一首音乐的按钮nextbtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(i<musicFile.length-1){i++;}else{i=0;}musicnameView.setText(musicFile[i]);prepareMusic();if(isPlay){playMusic();}}});
<span style="white-space:pre"></span>//播放按钮playorsotpbtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(isPlay){playorsotpbtn.setImageResource(android.R.drawable.ic_media_play);mediaPlayer.pause();ispause=true;}if(!isPlay){playorsotpbtn.setImageResource(android.R.drawable.ic_media_pause);mediaPlayer.start();}if(isPlay){isPlay=false;}else{isPlay=true;}}});}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_BACK:new AlertDialog.Builder(this).setTitle("退出").setIcon(android.R.drawable.ic_dialog_alert).setMessage("是否退出程序").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).create().show();break;default:break;}return true;}Handler handle=new Handler();/** * 每一秒,修改音乐当前播放时间,及改变进度条的进度 */public Runnable updateprogress=new Runnable() {@Overridepublic void run() {int currentvalue=mediaPlayer.getCurrentPosition();musicSeek.setProgress(currentvalue);int minute=(int)((currentvalue/1000.0)/60.0);int second=(int)((currentvalue/1000.0)%60.0);current.setText(minute+":"+second);handle.postDelayed(updateprogress, 1000);}};/** * 播放音乐 */public void playMusic(){mediaPlayer.start();handle.post(updateprogress);}/** * 预备音乐文件 */public void prepareMusic() {mediaPlayer.reset();try {mediaPlayer.setDataSource(InitActivity.musicDir+"/"+musicnameView.getText().toString());mediaPlayer.prepare();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}countTime();}/** * 获得音乐文件的播放总时间 */public void countTime(){int maxvalue=mediaPlayer.getDuration();int minute=(int)((maxvalue/1000.0)/60.0);int second=(int)((maxvalue/1000.0)%60.0);max.setText(minute+":"+second);}}

音乐播放器,首先得有音乐文件,才能播放。

所以得有一个文件路径,这里我只是简单的创建的了一个文件夹存放音乐文件。

在固定的路径下读取音乐文件然后播放

//音频文件的路径File file=new File(InitActivity.musicDir);//过滤仅读取MP3格式的文件musicFile=file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String filename) {return filename.endsWith(".mp3");}});
有了音乐文件后就可以用Mediapalyer加载文件然后播放。

/** * 预备音乐文件 */public void prepareMusic() {mediaPlayer.reset();try {mediaPlayer.setDataSource(InitActivity.musicDir+"/"+musicFile[i]);mediaPlayer.prepare();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}countTime();}

public void playMusic(){mediaPlayer.start();handle.post(updateprogress);}

这是我第一次写博客,写的不好,希望大家能够指点我的缺漏

源码http://download.csdn.net/detail/u013387330/7883017



0 0