Почему MediaPlayer OnCompletion запускается при первом воспроизведении мультимедиа? - PullRequest
3 голосов
/ 27 сентября 2011

Я потратил много часов, пытаясь выяснить это:

Когда MediaPlayer загружается и запускается в первый раз, вызывается его OnCompletion.Это проблема, потому что у меня есть некоторый код, который пропускает к следующему треку, когда предыдущий трек закончен.

Я решил это, используя флаг в слушателе OnCompletion, но почему это так?

Этот фрагмент из метода play () в моем сервисе:

        mp.setDataSource(mCurrentMediaFile);
        mp.prepare();
        mDuration = mp.getDuration();
        int seek = mDuration * position / 1000;
        mp.seekTo(seek);
        mp.start();

По какой-то причине onCompletion вызывается сразу после возврата из метода play (), хотя это первый трек, который воспроизводится послеслужба создана.

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Вы должны попытаться поместить свой код mp.seekTo в обратный вызов onPrepared.Если значение поиска вступает в силу до обратного вызова onPrepared, значение поиска сбрасывается MediaPlayer.Наконец, медиа необходимо правильно буферизовать, прежде чем знать, какую позицию искать.Это обеспечивает обратный вызов onPrepared.

Надеюсь, это поможет!

1 голос
/ 19 декабря 2011

Единственная причина, по которой я вижу такое поведение в предоставленном коде, это неверное значение из строки int seek = mDuration * position / 1000;.Выйдите из значения, чтобы проверить его.

...