实现音乐播放器,多线程处理进度条
来源:互联网 发布:网络摄像头通用pc软件 编辑:程序博客网 时间:2024/05/19 04:26
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);File musicDir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);file=new File(musicDir,"朴树 - 白桦林.mp3");seekBar=(SeekBar) findViewById(R.id.seekBar1);currentTv=(TextView) findViewById(R.id.TextView01);durationTv=(TextView) findViewById(R.id.TextView02);seekBar.setOnSeekBarChangeListener(this);mHandler=new MainHandler();//默认当前线程Looper}enum States{STOP,PAUSE}States state=States.STOP;private MediaPlayer mPlayer;private SeekBarThread barThread;/**实现音乐的播放*/public void onMusicPlay(View v){//判定播放器对象是否为空,为null则创建新的对象if(mPlayer==null){mPlayer=new MediaPlayer();mPlayer.setOnPreparedListener(this);mPlayer.setOnCompletionListener(this);}//判定媒体播放状态,假如是暂停则直接启动播放if(state==States.PAUSE){mPlayer.start();return;}//假如不是暂停状态则设置要播放的音乐路径,加载音乐try{mPlayer.setDataSource(file.getPath());mPlayer.prepareAsync();//工作线程加载}catch(Exception e){e.printStackTrace();}//更新seekBarif(barThread==null){barThread=new SeekBarThread();barThread.start();}}private boolean isUpdate=true;/**负责给主线程发消息,更新SeekBar的线程对象*/class SeekBarThread extends Thread{@Overridepublic void run() {while(isUpdate){try{sleep(1000);}catch(Exception e){}mHandler.sendEmptyMessage(1);}}}/**实现进度条*/private SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");class MainHandler extends Handler{public MainHandler() {}public MainHandler(Looper looper) {super(looper);}@Overridepublic void handleMessage(Message msg) {if(msg.what==1&&mPlayer!=null){int cPos=mPlayer.getCurrentPosition();//获取当前位置 seekBar.setProgress(cPos);//setMax是设置 进度条的最大值,setProgress是设置进度条的当前进度。}}}/**实现音乐的暂停*/public void onMusicPause(View v){if(mPlayer!=null&&mPlayer.isPlaying()){mPlayer.pause();state=States.PAUSE;}}@Overrideprotected void onDestroy() {super.onDestroy();isUpdate=false;if(mPlayer!=null){mPlayer.release();mPlayer=null;}}/**当音乐加载完成以后会执行此方法*/@Overridepublic void onPrepared(MediaPlayer mp) {Log.i("TAG", "onPrepared");mp.start();//getDuration()获取歌曲长度,毫秒durationTv.setText(sdf.format(new Date(mPlayer.getDuration())));seekBar.setMax(mPlayer.getDuration());}@Overridepublic void onCompletion(MediaPlayer mp) {//Completion 结束Log.i("TAG", "onCompletion");mp.start();}/**以下是设置seekBar监听,实现接口后自动添加的*/@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {currentTv.setText(sdf.format(new Date(mPlayer.getCurrentPosition())));}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stub}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {if(mPlayer!=null){int cPos=seekBar.getProgress();//实现跳转到要播放的位置的功能!mPlayer.seekTo(cPos);}}
0 0
- 实现音乐播放器,多线程处理进度条
- android实现音乐播放器(进度条)
- android实现音乐播放器(进度条)
- Android 实例:多线程下载,进度条,音乐播放器
- 音乐播放器--简单实现播放、暂停、随机播放、音乐进度条(第一版)
- MediaPlayer 音乐播放器进度条
- Android音乐播放器设置播放进度条
- android音乐播放器进度条研究
- android音乐播放器,可进度条调节
- 音乐播放器+进度条 V2.0
- 57.音乐播放器的进度条
- 自定义音乐播放进度条
- android 播放音乐-进度条
- Android音乐播放器的播放进度条(转)
- 模拟音乐播放器进度条以及播放、暂停功能
- Android带播放进度条的音乐播放器
- Android之MediaPlayer播放音乐并实现进度条实例
- 实现本地音乐选择,播放,带可拖动进度条
- EL表达式和JSTL笔记
- 旋转数组的最小数字
- 浅谈Android中常用的五种布局方式
- 输入流和字符串的相互转换
- 删除链表中倒数K元素
- 实现音乐播放器,多线程处理进度条
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片
- java web项目发布
- 实现堆排序
- 最大公约数与最小公倍数的C语言实现
- 安卓调节屏幕亮度Seekbar
- Android自定义捕获Application全局异常
- Hibernate的HQL查询