Спасибо вам, занимаюсь этой же задачей, очень помогло!
Вопрос — а как организовать обновление прогресса для проигрывания в Activity?
С ходу пришел такой вариант — пробрасывать нужные значени (длину трека, текущую позицию) в полях PlayerServiceBinder, а в Activity запускать/останавливать обновления UI с нужной частотой.

В PlaybackState есть и длина трека и текущая позиция. Посмотрите на то, как это реализовано в UniversalMusicPlayer. UniversalMusicPlayer — это пример от Google. Там реализовано то же самое, что и в статье. Просто UniversalMusicPlayer очень сложен для понимания с нуля, поэтому я и написал упрощенный вариант.
В UI метод updateProgress дергается с некоторой периодичностью. Метод забирает из PlaybackState последнюю известную позицию и время, когда State был обновлен, и высчитывает дельту. Соответственно в сервисе по каждому "чиху" state с позицией обновляется (в методе updatePlaybackState).
Если позицию писать в PlaybackState, то она будет везде, а если самому пробрасывать данные, то позиция будет только в вашей Activity.

Только полноправные пользователи могут оставлять комментарии.
Войдите, пожалуйста.