開發過程遇到:
AssetFileDescriptor afd = c.getAssets().openFd("ring.mp3"); mMediaPlayer.setDataSource(afd.getFileDescriptor());mMediaPlayer.setDataSource(c.getResources().openRawResourceFd(R.raw.ring).getFileDescriptor());以上是兩種設置資源的方法。
mMediaPlayer.PRepare();mMediaPlayer.start();在測試demo 的Activity中執行,是沒有問題的。但是在項目中發現,使用OPPO等設備時,當設備push到達后,使用handler處理時,報出這樣的錯誤。
java.io.IOException: Prepare failed.: status=0x1 at android.media.MediaPlayer.prepare(Native Method)
于是乎,先仔細查看API。雖然沒有直接得到答案,但是有提到prepare應該要在子線程中應用,修改成:
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } });mMediaPlayer.prepareAsync();結果還是不行?。?!
不過沒有拋出異常。
+++++++++++++++++++++++++分割+++++++++++++++++++++++++++++++++++++++++++++++++++++
再是乎,
mMediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } });心碎一地,Error,what=1;extra=-2*****,(很大一個數)最后嘗試:
fis = new FileInputStream(file); mMediaPlayer.setDataSource(fis.getFD());該路徑是SD卡上的一個路徑。終于可以了聽到聲音了……=========================================================================================
項目上也使用上了,但是不知道問題出在哪里??
難道是自定義Handler的問題?
在demo中試了也Handler處理,是可以響鈴的。
劍走偏鋒:
試著在項目上的Handler中發出廣播,在Receiver中調用響鈴,居然,居然,成功了!!
表示不解!?。?!大家有遇到的可以分享下。
新聞熱點
疑難解答