MediaPlayer seekTo непоследовательно воспроизводит песни с самого начала - PullRequest
4 голосов
/ 09 ноября 2010

Я использую класс Android MediaPlayer, чтобы начать воспроизведение песни со смещения.После указания этого смещения в коде я проигрываю песню, ожидая услышать ее с этой позиции смещения, а скорее слышу, как она воспроизводится с самого начала.Обратите внимание на следующий код:

    MediaPlayer mplayer = new MediaPlayer();
    mplayer.reset();
    try {
        // For example's sake, specify some known song path
        mplayer.setDataSource("//media/external/audio/media/1");
        // call blocking prepare()
        mplayer.prepare();
    } catch (Exception e) {
    // Keep try/catch simple for example's sake
        e.printStackTrace();
        return;
    }

    // seekTo is an asynchronous operation. Set it's complete callback to play the song once seekTo has completed
    mplayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
        @Override
        public void onSeekComplete(MediaPlayer mp) {
            // Start the song 30 seconds in
            mp.start();
        }
    });
    // Seek to 30 seconds into the song
    mplayer.seekTo(30000);

Этот пример кода работает без ошибок в эмуляторе (проверено на Android 1.6, 2.1 и 2.2);однако при запуске на некоторых телефонах песня будет воспроизводиться с самого начала.Я точно знаю, что это происходит на моем Droid Incredible (Android 2.2).Также обратите внимание, что LogCat всегда будет иметь некоторые выходные данные из класса MediaPlayer, сообщая, что положение песни действительно было установлено с некоторым смещением.Я отлаживал это часами, просматривал форумы и до сих пор не нашел решения.Пожалуйста, помогите.

1 Ответ

1 голос
/ 07 января 2011

Если вы не нашли его самостоятельно, это проблема буферизации ( проблема, задокументированная здесь ).Поиск небуферизованной позиции приводит к игре с самого начала.Предлагаемые решения найдены здесь (не самое элегантное, но обо всем, что можно сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...