1041 字
5 分钟
开始使用
React Native Track Player 入门指南
1. 基础设置
在开始使用 React Native Track Player 之前,建议先了解不同平台支持的功能差异,这有助于您在开发过程中避免不必要的问题。
提示:关于各平台支持的功能详细对比,请参考《平台支持》文档。
1.1 注册播放服务
播放服务是 React Native Track Player 的核心组件,它负责处理后台播放和远程控制事件。
首先,在项目中创建一个播放服务文件。以下是 JavaScript 版本的示例:
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. 轨道播放器选项
轨道播放器可以使用许多选项进行配置。其中一些选项与锁屏/通知中可用的媒体控件及其行为有关,其他选项则描述了平台所需功能的可用性。
更多详细信息,请参考官方文档的高级部分。