Skip to content

Commit 1b3c9e4

Browse files
authored
🐛 Fix media control status synchronization (#12)
1 parent cdfa352 commit 1b3c9e4

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

src/hooks/usePlayAudio.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,12 @@ const usePlayAudio = (
5454
});
5555

5656
player?.bePaused(() => {
57+
navigator.mediaSession.playbackState = "paused";
5758
setIsPlaying(false);
5859
});
5960

6061
player?.bePlayed(() => {
62+
navigator.mediaSession.playbackState = "playing";
6163
setIsPlaying(true);
6264
});
6365

src/layout/Player.tsx

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ const Player = () => {
2929
return () => {
3030
if ("mediaSession" in navigator) {
3131
navigator.mediaSession.metadata = null;
32-
navigator.mediaSession.setActionHandler("play", null);
33-
navigator.mediaSession.setActionHandler("pause", null);
34-
navigator.mediaSession.setActionHandler("nexttrack", null);
35-
navigator.mediaSession.setActionHandler("previoustrack", null);
36-
navigator.mediaSession.setActionHandler("seekto", null);
32+
(
33+
["play", "pause", "nexttrack", "previoustrack", "seekto"] as const
34+
).forEach((eventName) =>
35+
navigator.mediaSession.setActionHandler(eventName, null),
36+
);
3737
}
3838
};
3939
}, []);
@@ -79,23 +79,26 @@ const Player = () => {
7979
const controls = usePlayAudio(rawUrl, undefined, next);
8080

8181
// 设置媒体通知 https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API
82-
if ("mediaSession" in navigator) {
83-
navigator.mediaSession.metadata = new MediaMetadata({
84-
title,
85-
artist,
86-
artwork: [{ src: coverUrl || "" }],
87-
});
88-
89-
navigator.mediaSession.setActionHandler("play", () => controls.play());
90-
navigator.mediaSession.setActionHandler("pause", () => controls.pause());
91-
navigator.mediaSession.setActionHandler("nexttrack", () => next());
92-
navigator.mediaSession.setActionHandler("previoustrack", prev);
93-
navigator.mediaSession.setActionHandler("seekto", (val) => {
94-
if (val.seekTime) {
95-
controls.jump(val.seekTime);
96-
}
97-
});
98-
}
82+
useEffect(() => {
83+
if ("mediaSession" in navigator) {
84+
navigator.mediaSession.metadata = new MediaMetadata({
85+
title,
86+
artist,
87+
artwork: [{ src: coverUrl || "" }],
88+
});
89+
90+
navigator.mediaSession.setActionHandler("play", () => controls.play());
91+
navigator.mediaSession.setActionHandler("pause", () => controls.pause());
92+
navigator.mediaSession.setActionHandler("nexttrack", () => next());
93+
navigator.mediaSession.setActionHandler("previoustrack", prev);
94+
navigator.mediaSession.setActionHandler("seekto", (val) => {
95+
if (val.seekTime) {
96+
controls.jump(val.seekTime);
97+
}
98+
});
99+
}
100+
// eslint-disable-next-line react-hooks/exhaustive-deps
101+
}, [musicInfo]);
99102

100103
const playerInfo = {
101104
...controls,

0 commit comments

Comments
 (0)