1、基本使用

1-1、播放网络URL

  1. public class MainActivity extends AppCompatActivity {
  2. private static final String TAG = "MainActivity";
  3. private MediaPlayer mediaPlayer;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. }
  9. public void start(View view) {
  10. mediaPlayer = new MediaPlayer();
  11. mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  12. @Override
  13. public void onPrepared(MediaPlayer mp) {
  14. Log.d(TAG, "onPrepared: " + mp.toString());
  15. mediaPlayer.start();
  16. }
  17. });
  18. mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  19. @Override
  20. public void onCompletion(MediaPlayer mp) {
  21. Log.d(TAG, "onCompletion: " + mp.toString());
  22. }
  23. });
  24. mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
  25. @Override
  26. public void onSeekComplete(MediaPlayer mp) {
  27. Log.d(TAG, "onSeekComplete: " + mp.toString());
  28. }
  29. });
  30. mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
  31. @Override
  32. public boolean onError(MediaPlayer mp, int what, int extra) {
  33. Log.e(TAG, "onError: what = " + what + ", extra = " + extra);
  34. return false;
  35. }
  36. });
  37. try {
  38. String url = "http://hipanda.hf.openstorage.cn/talkres/LTP_Poem_Res/3f6ad10fe8e0434d99acaa6c9e4ee935.mp3";
  39. mediaPlayer.setDataSource(url);
  40. // 同步prepare
  41. mediaPlayer.prepare();
  42. mediaPlayer.setLooping(true);
  43. mediaPlayer.start();
  44. } catch (IOException e) {
  45. Log.e(TAG, "start: " + e.toString());
  46. e.printStackTrace();
  47. }
  48. }
  49. public void play(View view) {
  50. mediaPlayer.start();
  51. }
  52. public void pause(View view) {
  53. mediaPlayer.pause();
  54. // mediaPlayer.setVolume(0.5F,0.5F);
  55. }
  56. public void stop(View view) {
  57. mediaPlayer.stop();
  58. // mediaPlayer.setVolume(1,1);
  59. }
  60. public void statu(View view) {
  61. int currentPosition = mediaPlayer.getCurrentPosition();
  62. Log.e(TAG, "statu: currentPosition = " + currentPosition);
  63. int duration = mediaPlayer.getDuration();
  64. Log.e(TAG, "statu: duration = " + duration);
  65. boolean playing = mediaPlayer.isPlaying();
  66. Log.e(TAG, "statu: playing = " + playing);
  67. boolean looping = mediaPlayer.isLooping();
  68. Log.e(TAG, "statu: looping = " + looping);
  69. }
  70. }
  • 调用start之后会播放,播放过程中可以获取进度和总时长

    1. D/MainActivity: onPrepared: android.media.MediaPlayer@3b4d7c9
    2. E/MainActivity: statu: currentPosition = 6644
    3. E/MainActivity: statu: duration = 23518
    4. E/MainActivity: statu: currentPosition = 8221
    5. E/MainActivity: statu: duration = 23518
    6. E/MainActivity: statu: currentPosition = 9987
    7. E/MainActivity: statu: duration = 23518
    8. E/MainActivity: statu: currentPosition = 15639
    9. E/MainActivity: statu: duration = 23518
    10. E/MainActivity: statu: currentPosition = 17512
    11. E/MainActivity: statu: duration = 23518
    12. E/MainActivity: statu: currentPosition = 19003
    13. E/MainActivity: statu: duration = 23518
    14. E/MainActivity: statu: currentPosition = 22846
    15. E/MainActivity: statu: duration = 23518
    16. D/MainActivity: onCompletion: android.media.MediaPlayer@3b4d7c9

    1-2、播放raw

  • main/res/raw/test.mp4

    1. mediaPlayer = MediaPlayer.create(this, R.raw.test);
    2. // 无须prepare,否者会报错
    3. // mediaPlayer.prepare();
    4. mediaPlayer.setLooping(true);
    5. mediaPlayer.start();

    1-3、播放本地文件

    1. try {
    2. mediaPlayer = new MediaPlayer();
    3. String url = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+"test.mp3";
    4. mediaPlayer.setDataSource(url);
    5. mediaPlayer.prepare();
    6. mediaPlayer.start();
    7. } catch (IOException e) {
    8. Log.e(TAG, "start: " + e.toString());
    9. e.printStackTrace();
    10. }

    1-4、播放assets

  • main/assets/test.mp4

    1. try {
    2. mediaPlayer = new MediaPlayer();
    3. AssetFileDescriptor fileDescriptor = getAssets().openFd("test.mp3");
    4. mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
    5. mediaPlayer.prepare();
    6. mediaPlayer.start();
    7. } catch (IOException e) {
    8. Log.e(TAG, "start: " + e.toString());
    9. e.printStackTrace();
    10. }

    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): 视频尺寸监听