ci / api / api (push) Canceled after 0s
ci / module boundaries / boundaries (push) Canceled after 0s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Canceled after 11m29s
ci / db / db (push) Canceled after 11m22s
ci / mobile / mobile (Metro-бандл Android) (push) Canceled after 6m43s
ci / recommender / recommender (push) Canceled after 6m47s
ci / ts / ts (packages + web) (push) Canceled after 1s
23 lines
1.3 KiB
TypeScript
23 lines
1.3 KiB
TypeScript
import TrackPlayer, { Event } from 'react-native-track-player';
|
|
|
|
import { player } from './controller';
|
|
|
|
/**
|
|
* Фоновый сервис: кнопки уведомления, экрана блокировки и гарнитуры. Работает и без UI —
|
|
* команды уходят прямо в ExoPlayer, а учёт прослушиваний ведёт тот же контроллер.
|
|
*/
|
|
export async function PlaybackService(): Promise<void> {
|
|
TrackPlayer.addEventListener(Event.RemotePlay, () => player.play());
|
|
TrackPlayer.addEventListener(Event.RemotePause, () => player.pause());
|
|
TrackPlayer.addEventListener(Event.RemoteStop, () => player.pause());
|
|
TrackPlayer.addEventListener(Event.RemoteNext, () => player.next());
|
|
TrackPlayer.addEventListener(Event.RemotePrevious, () => void player.prev());
|
|
TrackPlayer.addEventListener(Event.RemoteSeek, ({ position }) => player.seek(position * 1000));
|
|
// Звонок / голосовой ассистент: приостанавливаем и продолжаем сами (autoHandleInterruptions — для фокуса).
|
|
TrackPlayer.addEventListener(Event.RemoteDuck, ({ paused, permanent }) => {
|
|
player.setInterrupted(paused || permanent);
|
|
if (permanent) void TrackPlayer.pause();
|
|
else if (paused) void TrackPlayer.pause();
|
|
});
|
|
}
|