【Android】- MediaPlayer错误之MediaPlayer start called in state 0
来源:互联网 发布:装潢设计效果图软件 编辑:程序博客网 时间:2024/06/06 16:13
先看MediaPlayer的这张图:
1.MediaPlayer.create(this, R.raw.music);设置数据源
出现MediaPlayer start called in state 0 主要原因在于start()出现问题,问题在于start()播放开始之前没有调用prepare()。在初始化MediaPlayer时,通过create()方法设置数据源,则不能写mediaPlayer.prepare()方法,只要成功返回播放器就不需要prepare,但是:如果反复多次调用了start()和stop()方法,就会出现MediaPlayer start called in state 0错误,因此需要在start()之前必须重新prepare()的或stop()之后调用prepare(),如果使用pause()暂停则不需要在其之后调用prepare(),直接start()就可以。
代码如下:
@Overridepublic void onCreate() { mediaPlayer = MediaPlayer.create(this, R.raw.music); super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { boolean isPlaying = intent.getBooleanExtra("isPlaying", false); if (isPlaying&&!mediaPlayer.isPlaying()){ mediaPlayer.start(); }else if (!isPlaying&&mediaPlayer.isPlaying()){ mediaPlayer.stop(); try { mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } } return super.onStartCommand(intent, flags, startId);}
2.mediaPlayer.setDataSource("http://zphxl.tunnel.qydev.com/music/Burning.mp3");设置数据源
mediaPlayer.setDataSource()之后需要调用prepare(),才可以start(),不然会报错,但我们播放在线音频时,做好使用prepareAsync()。
/** * 创建一个类,并继承Binder,将暴露该类的方法写入其中 */public class MyMusicService extends Binder{ public MusicBindService getMusicService(){ return MusicBindService.this; }}/*实例化创建的MusicService*/private IBinder iBinder = new MyMusicService();@Overridepublic IBinder onBind(Intent intent) { return iBinder;}public void play(){ mediaPlayer = new MediaPlayer(); try { if (mediaPlayer != null && mediaPlayer.isPlaying()) {//确保在prepare()之前调用了stop() mediaPlayer.stop(); mediaPlayer.reset(); } mediaPlayer.setDataSource("http://zphxl.tunnel.qydev.com/music/Burning.mp3"); mediaPlayer.setOnPreparedListener(preparedListener); mediaPlayer.prepareAsync();//在线播放音频,使用prepareAsync() } catch (IOException e) { e.printStackTrace(); }}MediaPlayer.OnPreparedListener preparedListener = new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); }};public void stop(){ if (mediaPlayer != null && mediaPlayer.isPlaying()) {//在播放状态才可以停止播放 mediaPlayer.stop(); mediaPlayer.reset(); }}@Overridepublic boolean onUnbind(Intent intent) { return super.onUnbind(intent);}@Overridepublic void onDestroy() { super.onDestroy(); mediaPlayer.release();}
阅读全文
0 0
- 【Android】- MediaPlayer错误之MediaPlayer start called in state 0
- Mediaplayer start called in state 0
- Error: MediaPlayer start called in state 64
- MediaPlayer: start called in state 0报错处理
- android错误之MediaPlayer用法的Media Player called in state *
- android错误之MediaPlayer用法的Media Player called in state *
- 实习入职第九天---android错误之MediaPlayer用法的Media Player called in state *
- Android MediaPlayer Error (-38, 0) “stop called in state 0”
- Error: MediaPlayer start called in state 1 & 64
- MediaPlayer 的prepareAsync called in state 8 错误
- Android MediaPlayer播放prepareAsync called in state 8解决办法
- Android MediaPlayer播放prepareAsync called in state 8解决办法
- Android MediaPlayer 播放prepareAsync called in state 8解决办法
- Android MediaPlayer 播放prepareAsync called in state 8解决办法
- 【完美解决系列】Android MediaPlayer stop called in state 1
- mediaplayer stop called in state 1
- mediaplayer stop called in state 1
- android media中的start called in state 64错误
- Python中的正则表达式探秘1
- 棋牌开发需要注意哪些事项
- android开发:activity继承AppCompatActivity 去掉标题栏
- .net数组集合字符串
- linux常用指令
- 【Android】- MediaPlayer错误之MediaPlayer start called in state 0
- 使用JS让网站自动跳转到对应的WAP页面
- html表单设计
- Java设计模式之观察者模式
- 未来币-Ardor
- 转]阻碍PHP新手程序员进步的5件事
- android studio集成环信
- acm c语言训练 数不同的单词数
- 如何选择开发语言或者开发工具