1041 字
5 分钟
开始使用

React Native Track Player 入门指南#

1. 基础设置#

在开始使用 React Native Track Player 之前,建议先了解不同平台支持的功能差异,这有助于您在开发过程中避免不必要的问题。

提示:关于各平台支持的功能详细对比,请参考《平台支持》文档。

1.1 注册播放服务#

播放服务是 React Native Track Player 的核心组件,它负责处理后台播放和远程控制事件。

首先,在项目中创建一个播放服务文件。以下是 JavaScript 版本的示例:

service.js
const TrackPlayer = require('react-native-track-player');
module.exports = async function() {
// 在这里添加事件监听器
// 更详细的事件处理请参考《播放服务》文档
};

然后,在应用的入口文件中注册播放服务(通常在项目根目录的 index.js 文件中):

// AppRegistry.registerComponent(...);
TrackPlayer.registerPlaybackService(() => require('./service'));

注意:如果你使用 TypeScript,可以创建更结构化的播放服务。详细信息请参考《播放服务》文档。

1.2 设置播放器#

接下来,你需要设置播放器。这通常需要不到一秒钟的时间:

import TrackPlayer from 'react-native-track-player';
await TrackPlayer.setupPlayer();
// 播放器已准备好使用

请确保在与 TrackPlayer 的任何其他功能交互之前完成设置方法,以避免不稳定。

2. 控制播放器#

2.1 向播放队列添加轨道#

你可以使用 URL 或通过在应用包或文件系统中引用文件来向播放器添加轨道。

首先,你需要创建一个轨道对象,这是一个普通的 JavaScript 对象,包含描述轨道的多个属性:

var track1 = {
url: 'http://example.com/avaritia.mp3', // 从网络加载媒体
title: 'Avaritia',
artist: 'deadmau5',
album: 'while(1<2)',
genre: 'Progressive House, Electro House',
date: '2014-05-20T07:00:00+00:00', // RFC 3339 格式
artwork: 'http://example.com/cover.png', // 从网络加载封面
duration: 402 // 持续时间(秒)
};
const track2 = {
url: require('./coelacanth.ogg'), // 从应用包加载媒体
title: 'Coelacanth I',
artist: 'deadmau5',
artwork: require('./cover.jpg'), // 从应用包加载封面
duration: 166
};
const track3 = {
url: 'file:///storage/sdcard0/Downloads/artwork.png', // 从文件系统加载媒体
title: 'Ice Age',
artist: 'deadmau5',
// 从文件系统加载封面:
artwork: 'file:///storage/sdcard0/Downloads/cover.png',
duration: 411
};

然后将这些轨道添加到队列中:

// 你可以将项目添加到队列中
await TrackPlayer.add([track1, track2, track3]);

2.2 获取播放器信息#

import TrackPlayer, { State } from 'react-native-track-player';
const state = await TrackPlayer.getState();
if (state === State.Playing) {
console.log('播放器正在播放');
};
let trackIndex = await TrackPlayer.getCurrentTrack();
let trackObject = await TrackPlayer.getTrack(trackIndex);
console.log(`标题: ${trackObject.title}`);
const position = await TrackPlayer.getPosition();
const duration = await TrackPlayer.getDuration();
console.log(`${duration - position} 秒剩余。`);

2.3 更改播放状态#

TrackPlayer.play();
TrackPlayer.pause();
TrackPlayer.reset();
// 跳转到 12.5 秒:
TrackPlayer.seekTo(12.5);
// 将音量设置为 50%:
TrackPlayer.setVolume(0.5);

2.4 控制队列#

// 跳转到特定轨道索引:
await TrackPlayer.skip(trackIndex);
// 跳转到队列中的下一个轨道:
await TrackPlayer.skipToNext();
// 跳转到队列中的上一个轨道:
await TrackPlayer.skipToPrevious();
// 从队列中移除两个轨道:
await TrackPlayer.remove([trackIndex1, trackIndex2]);
// 检索队列中的轨道对象:
const tracks = await TrackPlayer.getQueue();
console.log(`第一个标题: ${tracks[0].title}`);

3. 播放事件#

你可以订阅播放器事件,这些事件描述了播放状态的变化性质。例如,订阅 Event.PlaybackTrackChanged 事件以在轨道更改时收到通知,或订阅 Event.PlaybackState 事件以在播放器缓冲、播放、暂停和停止时收到通知。

3.1 示例#

import TrackPlayer, { Event } from 'react-native-track-player';
const PlayerInfo = () => {
const [trackTitle, setTrackTitle] = useState<string>();
// 进行初始设置,设置初始 trackTitle..
useTrackPlayerEvents([Event.PlaybackTrackChanged], async event => {
if (event.type === Event.PlaybackTrackChanged && event.nextTrack != null) {
const track = await TrackPlayer.getTrack(event.nextTrack);
const {title} = track || {};
setTrackTitle(title);
}
});
return (
<Text>{trackTitle}</Text>
);
}

4. 进度更新#

音乐应用通常需要一种自动方式来显示正在播放轨道的进度。为此,我们创建了 useProgress 钩子,它会自动更新自己。

4.1 示例#

import TrackPlayer, { useProgress } from 'react-native-track-player';
const MyPlayerBar = () => {
const progress = useProgress();
return (
// 注意:formatTime 和 ProgressBar 只是示例:
<View>
<Text>{formatTime(progress.position)}</Text>
<ProgressBar
progress={progress.position}
buffered={progress.buffered}
/>
</View>
);
}

5. 轨道播放器选项#

轨道播放器可以使用许多选项进行配置。其中一些选项与锁屏/通知中可用的媒体控件及其行为有关,其他选项则描述了平台所需功能的可用性。

更多详细信息,请参考官方文档的高级部分。

开始使用
https://fuwari.vercel.app/posts/react-native-track-player/开始/
作者
IceZheng
发布于
2025-12-08
许可协议
CC BY-NC-SA 4.0