1、基本使用
1-1、播放网络URL
public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private MediaPlayer mediaPlayer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void start(View view) {mediaPlayer = new MediaPlayer();mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {Log.d(TAG, "onPrepared: " + mp.toString());mediaPlayer.start();}});mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {Log.d(TAG, "onCompletion: " + mp.toString());}});mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {@Overridepublic void onSeekComplete(MediaPlayer mp) {Log.d(TAG, "onSeekComplete: " + mp.toString());}});mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {Log.e(TAG, "onError: what = " + what + ", extra = " + extra);return false;}});try {String url = "http://hipanda.hf.openstorage.cn/talkres/LTP_Poem_Res/3f6ad10fe8e0434d99acaa6c9e4ee935.mp3";mediaPlayer.setDataSource(url);// 同步preparemediaPlayer.prepare();mediaPlayer.setLooping(true);mediaPlayer.start();} catch (IOException e) {Log.e(TAG, "start: " + e.toString());e.printStackTrace();}}public void play(View view) {mediaPlayer.start();}public void pause(View view) {mediaPlayer.pause();// mediaPlayer.setVolume(0.5F,0.5F);}public void stop(View view) {mediaPlayer.stop();// mediaPlayer.setVolume(1,1);}public void statu(View view) {int currentPosition = mediaPlayer.getCurrentPosition();Log.e(TAG, "statu: currentPosition = " + currentPosition);int duration = mediaPlayer.getDuration();Log.e(TAG, "statu: duration = " + duration);boolean playing = mediaPlayer.isPlaying();Log.e(TAG, "statu: playing = " + playing);boolean looping = mediaPlayer.isLooping();Log.e(TAG, "statu: looping = " + looping);}}
调用start之后会播放,播放过程中可以获取进度和总时长
D/MainActivity: onPrepared: android.media.MediaPlayer@3b4d7c9E/MainActivity: statu: currentPosition = 6644E/MainActivity: statu: duration = 23518E/MainActivity: statu: currentPosition = 8221E/MainActivity: statu: duration = 23518E/MainActivity: statu: currentPosition = 9987E/MainActivity: statu: duration = 23518E/MainActivity: statu: currentPosition = 15639E/MainActivity: statu: duration = 23518E/MainActivity: statu: currentPosition = 17512E/MainActivity: statu: duration = 23518E/MainActivity: statu: currentPosition = 19003E/MainActivity: statu: duration = 23518E/MainActivity: statu: currentPosition = 22846E/MainActivity: statu: duration = 23518D/MainActivity: onCompletion: android.media.MediaPlayer@3b4d7c9
1-2、播放raw
main/res/raw/test.mp4
mediaPlayer = MediaPlayer.create(this, R.raw.test);// 无须prepare,否者会报错// mediaPlayer.prepare();mediaPlayer.setLooping(true);mediaPlayer.start();
1-3、播放本地文件
try {mediaPlayer = new MediaPlayer();String url = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+"test.mp3";mediaPlayer.setDataSource(url);mediaPlayer.prepare();mediaPlayer.start();} catch (IOException e) {Log.e(TAG, "start: " + e.toString());e.printStackTrace();}
1-4、播放assets
main/assets/test.mp4
try {mediaPlayer = new MediaPlayer();AssetFileDescriptor fileDescriptor = getAssets().openFd("test.mp3");mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());mediaPlayer.prepare();mediaPlayer.start();} catch (IOException e) {Log.e(TAG, "start: " + e.toString());e.printStackTrace();}
2、MediaPlayer常用API
getCurrentPosition( ):得到当前的播放位置
- getDuration() :得到文件的时间
- setLooping(boolean looping):设置是否循环播放
- isLooping():是否循环播放
- isPlaying():是否正在播放
- start():开始播放
- stop():停止播放
- pause():暂停
- prepare():准备(同步)
- prepareAsync():准备(异步)
- seekTo(int msec):指定播放的位置(以毫秒为单位的时间)
- release():释放MediaPlayer对象
- reset():重置MediaPlayer对象
- setVolume(float leftVolume, float rightVolume):设置音量
- 视频相关
- setAudioStreamType(int streamtype):指定流媒体的类型
- setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体
- setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示
- getVideoHeight() :得到视频高度
- getVideoWidth() :得到视频宽度
- 回调相关
- setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener): 网络流媒体的缓冲监听
- setOnCompletionListener(MediaPlayer.OnCompletionListener listener): 网络流媒体播放结束监听
- setOnErrorListener(MediaPlayer.OnErrorListener listener): 设置错误信息监听
- setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener): 视频尺寸监听
