0

I have a react-navigation modal with react-native-track-player, closing one and opening it back throws the error The player has already been initialized via setupPlayer. How to make sure it runs only once? I couldn't find a method to do so.

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);
  }
};
an92kz
  • 73
  • 8

1 Answers1

1

I made a function that runs once in App.js, and set a flag that can be later saved in context, store, or AsyncStorage if needed.

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
  }
}

Thoughts: TrackPlayer is initialized only once, however, I don't like this approach because I have a feeling that there should be a specific method for checking if the TrackPlayer instance has already been set up.

an92kz
  • 73
  • 8