使用 react-native-track-player 与 expo dev-client 时出错
我有一个 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,因为我目前正试图避免这种情况。有人知道为什么会发生这种情况吗?
请检查此 github 问题,似乎 react native track players 在 expo go 上不起作用 查看 github 问题
更新:
您随时可以创建开发版本并在 expo 上使用此库而不会出现任何问题 expo doc
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。