在我的应用程序中,我使用 MediaPlayer API 创建了一个音频播放器(仅支持WAV文件)。但有时候它不会回调 onCompletion Listener。我正在对 WAV 文件进行一些音频处理,比如插入和覆盖。这是因为音频头缺失导致的吗?为什么在播放完成后它不会回调呢?
确保 MediaPlayer 不是一个本地(临时)变量。因为局部变量将被 GC 收集。在这种情况下,onCompletion 将没有机会被调用。
在MediaPlayer的OnErrorListner方法中返回true
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
//Invoked when there has been an error during an asynchronous operation
switch (what) {
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
Log.e("MediaPlayer Error", "MEDIA ERROR NOT VALID FOR PROGRESSIVE PLAYBACK " + extra);
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Log.e("MediaPlayer Error", "MEDIA ERROR SERVER DIED " + extra);
break;
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Log.e("MediaPlayer Error", "MEDIA ERROR UNKNOWN " + extra);
break;
}
return true;
}
你使用了正确的方法,但是你是否在"// do some tasks here when playback completes " AREA中传递了任何代码。
如果没有,那么回调就没有任何意义。
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
Toast.makeText(getApplicationContext(),"Playback Completes", Toast.LENGTH_SHORT).show();
}
});
这个方法将在播放完成时弹出一个Toast。