MediaPlayer seekTo несовместимо играет песни с начала

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

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, указав, что позиция песни действительно установлена ​​на некоторое смещение. Я отлаживал это часами и просматривал форумы и до сих пор не получил решения. Пожалуйста помоги.

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

Intereting Posts