1
E/MediaPlayer: start called in state 2
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)
播放音乐 不进行mediaPlayer.prepare();会报如上错误。
2
下面正确代码:
MediaPlayer mediaPlayer = new MediaPlayer();
Log.d("TAG", "doClick: "+"测试1");
try {
mediaPlayer.setDataSource("mnt/sdcard/1.mp3");
Log.d("TAG", "doClick: "+"测试2");
mediaPlayer.prepare();
mediaPlayer.start();
Log.d("TAG", "doClick: "+"测试3");
} catch (IOException e) {
e.printStackTrace();
}
3
音乐常用api:
setDataSource(String) 要播放歌曲的路径(网络地址 本地文件路径都可以 )
开始播放 start()播放前必须做准备(mediaPlayer.prepare()播放本地使用同步 播放异地 网络的使用异步prepareasync())
暂停 mediaPlayer.pause();
重新播放 mediaPlayer.start();// 再次调用 重新播放
播放总时间 mediaPlayer.getDuration();
当前播放位置:int currentPosition = mediaPlayer.getCurrentPosition();//当前播放位置
一般与定时器连用:
// 获得对当前的长度(总不能拿一次 必须进行实时更新 使用timer定时器实时更新)
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
int currentPosition = mediaPlayer.getCurrentPosition();//当前播放位置
}
};
// 100毫秒后 每个1秒执行run方法
timer.schedule(task, 100, 1000);
}
mediaPlayer.reset();//可以防止bug 播放前先设置线
seekTo()// 播放指定位置
4 播放网络歌曲
public void doclick(View view){
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource("http://192.168.56.1/Demo/1.mp3");
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
5 mediaplayer的声明周期:
同步和异步
同步:一般播放本地音乐
异步:播放网络音乐 不用开启子线程
网友评论