开发者问题收集

使用 react-native-track-player 与 expo dev-client 时出错

2022-08-18
1332

我有一个 react-native expo 管理(SDK 44)项目,并试图添加 react-native-track-player。我正在执行安装步骤并不断遇到导致应用程序崩溃的相同错误:

TypeError: null is not an object (evaluating ‘TrackPlayer.RATING_HEART’)

我正在使用 eas build 在 android 设备上使用 expo start --dev-client 运行应用程序。我还没有在 ios 上测试过。

这是我的代码:

App.tsx

import TrackPlayer, {Capability} from 'react-native-track-player';

async function setup() {
  await TrackPlayer.setupPlayer({});
  await TrackPlayer.updateOptions({
    stopWithApp: false,
    capabilities: [
      TrackPlayer.CAPABILITY_PLAY,
      TrackPlayer.CAPABILITY_PAUSE,
      TrackPlayer.CAPABILITY_STOP,
      TrackPlayer.CAPABILITY_SEEK_TO,
    ],
    compactCapabilities: [
      TrackPlayer.CAPABILITY_PLAY,
      TrackPlayer.CAPABILITY_PAUSE,
    ],
  });
}

export default function App() {
...
  useEffect(() => {
    setup();

    return () => TrackPlayer.destroy();
  }, []);
}

index.js

import { registerRootComponent } from "expo"
import App from "./App"
import TrackPlayer from "react-native-track-player"

registerRootComponent(App)
TrackPlayer.registerPlaybackService(() => require("./service.js"))

service.js

import TrackPlayer from 'react-native-track-player';

module.exports = async function () {
  TrackPlayer.addEventListener('remote-play', () => {
    console.log('remote play clicked');
    TrackPlayer.play();
  });

  TrackPlayer.addEventListener('remote-pause', () => {
    console.log('remote pause clicked');
    TrackPlayer.pause();
  });

  TrackPlayer.addEventListener('remote-next', () => {
    TrackPlayer.skipToNext();
  });

  TrackPlayer.addEventListener('remote-previous', () => {
    TrackPlayer.skipToPrevious();
  });

  TrackPlayer.addEventListener('remote-stop', () => {
    TrackPlayer.destroy();
  });

  TrackPlayer.addEventListener('remote-seek', ({ position }) => {
    // TrackPlayer.destroy();
    console.log('remote seek:', position);
    TrackPlayer.seekTo(position);
  });
};

package.json

...
"main": "./index.js",
"dependencies": {
    ""react-native-track-player": "3.0.0",
"expo": "^44.0.6",
"react": "17.0.1",
"react-dom": "17.0.1",
"react-native": "0.64.3",

}

app.json

"expo": {
    ...
    "entryPoint": "./index.js",
}

到目前为止,我已经尝试过:

-清除缓存并重新安装 react-native-track-player

-将 jcenter() 添加到我的 build.gradle 文件中(如 此处 )

-我已尝试 ,但不确定我是否正确配置了它

我尚未尝试弹出 Expo,因为我目前正试图避免这种情况。有人知道为什么会发生这种情况吗?

2个回答

请检查此 github 问题,似乎 react native track players 在 expo go 上不起作用 查看 github 问题

更新:

您随时可以创建开发版本并在 expo 上使用此库而不会出现任何问题 expo doc

Kouma Ibrahim
2022-10-06

react-native-track-player 无法与 expo go 配合使用。

您是否已按照 expo-dev-client 的使用说明操作。您是否已导入它? 我在您的依赖项中没有看到 expo-dev-client。

我的建议是按照 expo 文档使用 expo-dev-client 进行构建。https://docs.expo.dev/develop/development-builds/installation/

当我这样做时,它会自动更新我的 package.json 以包含 expo-dev-client。

rjapenga
2023-09-07