1、基本使用
1-1、播放网络URL
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private MediaPlayer mediaPlayer;
@Override
protected 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() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "onPrepared: " + mp.toString());
mediaPlayer.start();
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.d(TAG, "onCompletion: " + mp.toString());
}
});
mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
Log.d(TAG, "onSeekComplete: " + mp.toString());
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public 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);
// 同步prepare
mediaPlayer.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@3b4d7c9
E/MainActivity: statu: currentPosition = 6644
E/MainActivity: statu: duration = 23518
E/MainActivity: statu: currentPosition = 8221
E/MainActivity: statu: duration = 23518
E/MainActivity: statu: currentPosition = 9987
E/MainActivity: statu: duration = 23518
E/MainActivity: statu: currentPosition = 15639
E/MainActivity: statu: duration = 23518
E/MainActivity: statu: currentPosition = 17512
E/MainActivity: statu: duration = 23518
E/MainActivity: statu: currentPosition = 19003
E/MainActivity: statu: duration = 23518
E/MainActivity: statu: currentPosition = 22846
E/MainActivity: statu: duration = 23518
D/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): 视频尺寸监听