在播放音频中SoundPool是个很好用的类,但是SoundPool只能播放音频,且通常只用来播放较短的音频,这就需要另外的类来实现视频和长音频的播放,那就是MediaPlay
实现MediaPlay的基本步骤是
- 创建MediaPlay对象
- 调用setDataSource对象这是音频文件路径
- 调用prepare加载音频
- 调用start开始播放
- 调用pause暂停
- 调用stop停止播放
而MediaPlay也有其他方法
- getCurrentPosition,获得当前播放位置
- getDuration,获得播放时长
- isPlay,判断是否处于播放状态
- release,释放资源
- reset,回到最初的状态
- seekTo,设置播放位置
- setVolume,设置音量
private MediaPlayer mediaPlayer=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer=new MediaPlayer();
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}else{
initMediaPlayer();
}
Button btPlayMp3= (Button) findViewById(R.id.btPlayMp3);
btPlayMp3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!mediaPlayer.isPlaying()){
mediaPlayer.start();
}
}
});
Button btPauseMp3= (Button) findViewById(R.id.btPauseMp3);
btPauseMp3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
}
});
Button btStopMp3= (Button) findViewById(R.id.btStopMp3);
btStopMp3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
private void initMediaPlayer(){
try {
File file=new File(Environment.getExternalStorageDirectory()+"/music","honor.mp3");
mediaPlayer.setDataSource(file.getPath());
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==1){
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
initMediaPlayer();
}else{
Toast.makeText(this,"未获得SD卡访问权限",Toast.LENGTH_LONG).show();
finish();
}
}
}
@Override
protected void onDestroy() {
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
super.onDestroy();
}
粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓