我有一个带有react-native-track-player的反应导航模式,关闭一个然后再打开它会抛出错误
The player has already been initialized via setupPlayer
。如何确保它只运行一次?我找不到这样做的方法。
useEffect(() => {
setupPlayer();
}, []);
const setupPlayer = async() => {
try {
await TrackPlayer.setupPlayer();
await TrackPlayer.updateOptions({
capabilities: [
Capability.Play,
Capability.Pause,
Capability.SkipToNext,
Capability.SkipToPrevious
],
});
await TrackPlayer.add(podcasts);
await gettrackdata();
await TrackPlayer.play();
} catch (error) {
console.log(error);
}
};
我创建了一个在 App.js 中运行一次的函数,并设置了一个标志,以后可以根据需要将其保存在上下文、存储或 AsyncStorage 中。
async function isPlayerInitialized() {
let isPlayerInitialized = false;
try {
await TrackPlayer.setupPlayer();
await TrackPlayer.updateOptions({
capabilities: [Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious]
});
isPlayerInitialized = true;
} catch (e) {
// intentionally leaved as blank
}
}
想法:TrackPlayer 只初始化一次,但是,我不喜欢这种方法,因为我感觉应该有一个特定的方法来检查 TrackPlayer 实例是否已经设置。
只需注释此代码即可
await TrackPlayer.setupPlayer();