java - 一首接一首播放歌曲导致 MP3Extractor 错误

标签 java android audio media-player

@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;
        }
    }

它可以工作,但是在歌曲结束后我在日志中有这个错误信息:

03-13 12:52:05.101: ERROR/MP3Extractor(34): Unable to resync. Signalling end of stream. 03-13 13:16:59.585: INFO/StagefrightPlayer(34): setDataSource('/mnt/sdcard/Audio/sound.mp3')

最佳答案

你真的不应该只有空的 catch block , 您可能会得到对该错误的解释,但您只是忽略了它 试试这个:

     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;
        }

关于java - 一首接一首播放歌曲导致 MP3Extractor 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296769/

相关文章:

android - android.intent.action.MAIN 是什么意思?

java.io.NotSerializableException 即使我实现了 "Serializable"

actionscript-3 - AS3-从头到尾切割后需要保存mp3文件

java - 具有依赖项的 Maven .jar 文件无法在除生成该文件的设备之外的任何其他设备上运行

java - 每个单个实体组每秒写入 1 次的限制?

java - 2011 年 Swing 应用程序的首选可视化编辑器 Eclipse 插件是什么?

java - 如何使用 putExtra() 传递具有不同值的相同数据

Android: LinearLayout addView 动画

java - 使用元数据唯一标识文件

ios - 如何从 AudioUnits C 函数调用 Objective-C 方法? (iOS)