2011-03-14 68 views
5
@Override 
public void onCreate(Bundle savedInstanceState) { 
... 
     mMediaPlayer = new MediaPlayer(); 

     mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      public void onCompletion(MediaPlayer mediaPlayer) { 
       playAudio(getNextAudioFile()); 
      } 
     }); 
.. 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if(mMediaPlayer != null) { 
     mMediaPlayer.release(); 
     mMediaPlayer = null; 
    } 
} 
    private boolean playAudio(String file) { 
     if(file.isEmpty()) { 
      return true; 
     } 

     if(mMediaPlayer.isPlaying()) {   
      mMediaPlayer.stop(); 
     } 
    mMediaPlayer.reset(); 

     mAudioFile = new File(mBaseAudioDir, file); 
     if(mAudioFile.canRead()) { 
      try { 
      mMediaPlayer.setDataSource(mAudioFile.getPath()); 
       mMediaPlayer.prepare(); 
      } catch (IllegalArgumentException e) { 
       return false; 
      } catch (IllegalStateException e) { 
       return false; 
      } catch (IOException e) { 
       return false; 
      } 
      mMediaPlayer.start(); 
      return true; 
     } else { 
      return false; 
     } 
    } 

它的工作原理,但歌曲結束後我在日誌中此錯誤信息播放的歌曲之一:陸續原因MP3Extractor錯誤

十二月3日至13日:52:05.101: ERROR/MP3Extractor( 34):無法 重新同步。信號流結束。 03-13 13:16:59.585: INFO/StagefrightPlayer(34): 的setDataSource( '到/ mnt/SD卡/音頻/ sound.mp3')

回答

2

你真的應該不只是空的catch塊, 您可能會得到該錯誤的解釋,但您只是忽略它 試試這個:

 try { 
     mMediaPlayer.setDataSource(mAudioFile.getPath()); 
      mMediaPlayer.prepare(); 
     } catch (IllegalArgumentException e) { 
      Log.e(TAG, "mMediaPlayer IllegalArgumentException " ,e); 
      return false; 
     } catch (IOException e) { 
      Log.e(TAG, "mMediaPlayer IOException" ,e); 
      return false; 
     }