編輯:關於Android編程
用到Media Player,遇到幾個問題,記一下
用法就不說了,使用的時候最好參考一下mediaPlayer的這張圖
第一個錯誤是Media Player called in state 8
這個是因為在調用start之前沒有prepare,因為我是用了
mediaPlayer = MediaPlayer.create(context, R.raw.notice);
去初始化的播放器,這個接口說明
只要成功返回了播放器就不需要再去prepare了,但是我之後多次調用stop和start,就導致出現上面錯誤,
對照圖上也可以看出來,如果在暫停的時候使用多是stop,則在start之前必須重新prepare,否則報錯Media Player called in state 8
如果暫停使用pause,那麼直接start就可以,不用prepare。
第二個錯誤是Media Player called in state 0
這個錯誤是由於
public void play(){ try { mediaPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); }
mediaPlayer.start();}
public void play(){ try { mediaPlayer.setOnPreparedListener(preparedListener); mediaPlayer.prepareAsync(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } OnPreparedListener preparedListener = new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } };
一看就明白了,剛開始我調完prepare就直接去start了,但是這時候可能prepare還沒有成功,所以就報了上面的錯誤。
之後又遇到一個prepareAsync called in state 8
這個解決方法在之前那個基礎上加一行代碼,確保在prepare之前播放器已經stop了
public void play() { try { if(mediaPlayer !=null){ mediaPlayer.stop(); } mediaPlayer.setOnPreparedListener(preparedListener); mediaPlayer.prepareAsync(); } catch (IllegalStateException e) { e.printStackTrace(); } currentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC); if (currentVolumn < maxVolumn) { am.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolumn, 0); } }
在Android NDK開發中,有兩個重要的文件:Android.mk和Application.mk,各盡其責,指導編譯器如何編譯程序,並決定編譯結果是什麼。本文將詳細說
目錄:1.ListView概述2.ListView使用中的重要角色(Adapter,ViewHolder,數據集,布局)3.ListView常用屬性4.ListView+
Fragments 誕生初衷自從Android 3.0中引入fragments 的概念,根據詞海的翻譯可以譯為:碎片、片段。其上的是為了解決不同屏幕分辯率的動態和靈活UI
如果你在開發過程中經常使用 RadioGroup,那你是否遇到過下面這種情況每當你點擊EditText彈出輸入法時,RadioGroup總是向上移動到輸入法的上面。你可能