Несколько идей:
1) Это, как я думаю, что вы предложили может работать:
Start именно так, как вы есть, подготовив два MediaPlayer
экземпляров с тем же носителем.
Звоните setNextMediaPlayer
при каждом передании другого в качестве параметра.
В обратном вызове onCompletion
для каждого, позвоните по телефону stop()
и prepareAsync()
на себя. Это должно вернуть его в подготовленное состояние, которое, как я полагаю, ожидает механизм setNextMediaPlayer
. Если звук является локальным ресурсом и имеет достаточную продолжительность, не должно быть проблем с этим подходом, хотя вы можете использовать обратный вызов onPrepared
, чтобы помочь проверить время, если оно есть.
В качестве альтернативы вы можете просто позвонить seekTo(0)
в обратном вызове onCompletion
, который должен быть быстрее метода stop()/prepareAsync()
. Однако, я думаю, что может не работать должным образом с setNextMediaPlayer
, так как он оставляет MediaPlayer
в завершенном состоянии. (Я не уверен, потому что я никогда не пробовал это.)
Не думаю, что следующий MediaPlayer
не будет установлен, поэтому я не думаю, что вам нужно будет позвонить setNextMediaPlayer
более одного раза за экземпляр , Но если вы это сделаете, используйте обратный вызов onPrepared
, чтобы каждый MediaPlayer
установил другой в качестве следующего игрока.
2) Используйте один MediaPlayer
и позвоните seekTo(0)
и start()
в обратном вызове onCompletion
. Я бы предположил, что это то, что происходит, когда игрок зацикливается, но я не уверен в этом. Возможно, это стоит того.
3) Изучите OpenSL и реализуйте собственный плеер в собственном коде. Этот подход гораздо более интенсивно исследуется, но обеспечивает наибольший контроль :)
спасибо Дэйв, я пробовал многие из них, но не пробовал seekto – farrukh
Работали ли функции seekTo? –
Это не работает таким образом, что я хочу, чтобы это не было гладким – farrukh