2026年Expo开发声音播放App的最新方法,以及如何实现后台播放
1. 技术栈与依赖
本指南基于 Expo SDK 54 + React Native 0.81,使用以下核心库:
| 库 | 用途 |
|---|---|
| expo-audio | 音频文件播放(mp3等) |
| expo-speech | 语音合成播放(TTS) |
安装方式:
npx expo install expo-audio expo-speech
2. 最简单的实现(非Hook方式)
如果不使用React Hook,可以直接创建Player实例:
import { Audio } from 'expo-audio';
const player = new Audio.Player();
await player.loadAsync(require('./sound.mp3'));
player.setIsLoopingAsync(true);
await player.playAsync();
核心API:
loadAsync(source)- 加载音频playAsync()/pauseAsync()/stopAsync()- 播放控制setIsLoopingAsync(true)- 循环播放setVolumeAsync(0.5)- 设置音量
注意:非Hook方式需要手动管理生命周期,在组件卸载时调用 player.unloadAsync() 释放资源。
3. 推荐方式:Hook实现
Expo提供了两个Hook,简化了状态管理和自动清理:
import { useAudioPlayer, useAudioPlayerStatus } from 'expo-audio';
const player = useAudioPlayer(require('./sound.mp3'));
const status = useAudioPlayerStatus(player);
优势:
- 自动订阅播放状态
- 组件卸载时自动清理
- 状态变化触发组件重渲染
4. 音频文件播放
4.1 加载音频
支持多种音频源格式:
// 本地文件
const player = useAudioPlayer(require('./audio.mp3'));
// URL远程音频
const player = useAudioPlayer({ uri: 'https://example.com/audio.mp3' });