Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer
2016-06-01 23:31
537 查看
播放器常用功能的demo
时间的显示 快进 后退 拖动等等
package com.example.mediaplayer_retry;import android.annotation.SuppressLint;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
MediaPlayer mMediaPlayer; Button mPlayButton, mPauseButton, mStopButton, mForWard, mBackWard; SeekBar mSeekBar; TextView mTextView_one,mTextView_two; Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { int currentPosition = mMediaPlayer.getCurrentPosition(); mSeekBar.setProgress(currentPosition); String time = formatTime(currentPosition); mTextView_one.setText(time); mHandler.sendEmptyMessageDelayed(0, 1000); }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setPlayListener(); setPause(); setStopListener(); setSeekBarListener(); } /******************************************************** * 初始化控件 */ private void initView() { mPlayButton = (Button) findViewById(R.id.media_play); mPauseButton = (Button) findViewById(R.id.media_pause); mStopButton = (Button) findViewById(R.id.media_stop); mForWard = (Button) findViewById(R.id.media_forward); mBackWard = (Button) findViewById(R.id.media_backwrad); mSeekBar = (SeekBar) findViewById(R.id.main_seekbar); mTextView_one = (TextView) findViewById(R.id.main_textview_time_one); mTextView_two = (TextView) findViewById(R.id.main_textview_time_two); mForWard.setOnClickListener(this); mBackWard.setOnClickListener(this); } /******************************************************* * 必须在方法中初始化mMediaPlayer对象 * 播放音乐的初始化动作 setDataSource(path)设置音频的路径就是mp3的路径 * mMediaPlayer.prepare()此方法就是装载音频文件 * mMediaPlayer.start();此方法必须在上面的方法执行完毕后才可以 * @param path 传入音频文件的路径参数 */ public void play(String path) { if (mMediaPlayer == null) { try { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(path); mMediaPlayer.prepare(); mMediaPlayer.start(); int position = mMediaPlayer.getDuration(); mTextView_two.setText(formatTime(position)); mSeekBar.setMax(position); mHandler.sendEmptyMessageDelayed(0, 1000); } catch (Exception e) { e.printStackTrace(); } }else if(mMediaPlayer != null && !mMediaPlayer.isPlaying()){ mMediaPlayer.start(); } } /********************************************************** * 设置播放按钮的点击事件 同时执行播放音乐方法 此点击事件采用的是匿名内部类的方式实现的 */ public void setPlayListener() { mPlayButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { play("/sdcard/hello.mp3"); } }); } /********************************************************* * 暂停当前播放的音乐 */ @SuppressLint("SdCardPath") public void setPause() { if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { mMediaPlayer.pause(); } } /************************************************* * 设置点击暂停按钮的点击事件 同时执行mMediaPlayer的暂停pause方法 * 此点击事件的方式是采用xml属性中设置onclick这个属性的方法 */ public void pause(View v) { setPause(); } /************************************************ * 停止播放音乐的方法 * 同时我们要释放内存,节约内存 * 把mMediaPlayer赋值为空,返回到开始播放的状态 */ public void stop(){ if(mMediaPlayer != null){ mMediaPlayer.stop(); mMediaPlayer.release(); mMediaPlayer = null; } } /************************************************* * 设置停止按钮的监听事件 * 此按钮的监听事件采用第三种方式 */ public void setStopListener(){ mStopButton.setOnClickListener(listener); } OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { stop(); } }; /*************************************************** * 设置快进10秒方法 */ public void forWard(){ if(mMediaPlayer != null){ int position = mMediaPlayer.getCurrentPosition(); mMediaPlayer.seekTo(position + 10000); } } /***************************************************** * 设置后退10秒的方法 */ public void backWard(){ if(mMediaPlayer != null){ int position = mMediaPlayer.getCurrentPosition(); if(position > 10000){ position-=10000; }else{ position = 0; } mMediaPlayer.seekTo(position); } } /******************************************************** * 设置seekbar的拖动监听事件 */ public void setSeekBarListener(){ mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onStopTrackingTouch(SeekBar seekBar) { } public void onStartTrackingTouch(SeekBar seekBar) { } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub if(mMediaPlayer != null && fromUser){ mMediaPlayer.seekTo(progress); } } }); } /******************************************************* * 关闭当前页面,停止播放 */ protected void onDestroy() { super.onDestroy(); stop(); } /******************************************************** * 设置快进和后退按钮的监听事件 * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.media_forward: forWard(); break; case R.id.media_backwrad: backWard(); break; default: break; } } /******************************************************** * 对时间的格式化 * @param time * @return */ public static String formatTime(int time){ if(time/1000%60 <10){ return time/1000/60 + ":0" + time/1000%60; }else{ return time/1000/60 + ":" + time/1000%60; } }
}
相关文章推荐
- 详解Android中Handler的实现原理
- Android开发笔记之:Handler Runnable与Thread的区别详解
- Android App中用Handler实现ViewPager页面的自动切换
- android的消息处理机制(图文+源码分析)―Looper/Handler/Message
- Android消息处理机制Looper和Handler详解
- AsyncTask陷阱之:Handler,Looper与MessageQueue的详解
- Android编程开发之seekBar采用handler消息处理操作的方法
- Android中Handler消息传递机制
- Android中的Handler与多线程应用实例
- android开发教程之handler异步更新ui
- Android定时器和Handler用法实例分析
- Android 可拖动的seekbar自定义进度值
- Toast和Handler的间隔使用实例
- Android中AsyncTask与handler用法实例分析
- 深入理解Android中的Handler异步通信机制
- android开发教程之android的handler使用方法
- 详解Android中Handler的使用方法
- 详解Android中Handler的内部实现原理
- Android handler 详解(面试必问)