2014-01-15 21 views
3

我M在logcat中得到一个警告消息媒体播放器完成而不释放(JNI)

W/MediaPlayer的-JNI(16795):MediaPlayer的没有被释放

请告诉我在哪里IM敲定错误以及如何解决问题。 我想第二次调用playAudio时,它会停止以前的mMediaPlayer音频播放。

public class WordAudio { 

MediaPlayer mMediaPlayer; 
String url; 
private static WordAudio wordAudio; 
private WordAudio() { 
} 

public static WordAudio getInstance() { 
    if (wordAudio == null) { 
     wordAudio = new WordAudio(); 
    } 
    return wordAudio; 

} 

public void playAudio(final Context context, String id) { 

    try { 

     if (mMediaPlayer != null) { 

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

     mMediaPlayer = new MediaPlayer(); 
     url = AUDIO_STREEM_URL+"id=" + id+ "&x=mp3"; 
     mMediaPlayer = MediaPlayer.create(context, Uri.parse(url)); 
     mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mMediaPlayer.start(); 
      } 
     }); 
     mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 
      public void onCompletion(MediaPlayer mMediaPlayer) {  
       //mMediaPlayer.release(); 
      } 
     }); 


     mMediaPlayer.setOnInfoListener(new OnInfoListener() { 
      @Override 
      public boolean onInfo(MediaPlayer mMediaPlayer, int what, int extra) { 
       if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {      
       } else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) { 
        mMediaPlayer.start(); 
       } 
       return false; 
      } 
     }); 
    } 
    catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}} 

感谢

+2

只是猜测'//mMediaPlayer.release();' –

+0

有U要我删除mMediaPlayer.release()的意见; – Gattsu

+1

是的,这就是我的建议。 –

回答

2

完成这样

mMediaPlayer = new MediaPlayer(); 
url = AUDIO_STREEM_URL; 
mMediaPlayer = MediaPlayer.create(context, Uri.parse(url)); 
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mMediaPlayer.start(); 
    } 
}); 
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 
    public void onCompletion(MediaPlayer mMediaPlayer) {  
     mMediaPlayer.release(); 
    } 
}); 
+0

对于我仍然剂量不工作! – Criss

+0

问它作为一个新的questoin – Gattsu