如何配置react-native-trackplayer使iOS端关闭APP时停止播放?
iOS端解决react-native-trackplayer后台播放问题的方案
要实现iOS端关闭APP时停止播放、禁止后台播放的需求,可按以下步骤操作:
1. 修正TrackPlayer的iOS类别配置
将iOS音频类别配置移至updateOptions中(而非setupPlayer),使用SoloAmbient类别确保后台自动暂停:
TrackPlayer.updateOptions({ android: { appKilledPlaybackBehavior: StopPlaybackAndRemoveNotification }, // 新增iOS核心配置 iosCategory: IOSCategory.SoloAmbient, iosCategoryMode: IOSCategoryMode.Default, iosCategoryOptions: [], progressUpdateEventInterval: 2000, color: "#ff35cf07", capabilities: [ Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious, Capability.Stop, ], compactCapabilities: [ Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious, Capability.Stop, ] })
SoloAmbient是iOS默认音频类别,特性为:
- APP进入后台时自动暂停播放
- 不允许与其他APP音频同时播放
- 无需后台音频权限
2. 移除iOS项目的后台音频权限
打开iOS项目的Info.plist文件,删除以下配置(如果存在):
<key>UIBackgroundModes</key> <array> <string>audio</string> </array>
该权限会强制允许APP在后台播放音频,即使TrackPlayer配置了禁止后台模式。
3. 监听APP生命周期,主动停止播放
在主APP组件中监听AppState变化,当APP切换到后台或处于非活跃状态时,主动停止播放并清理队列:
import { AppState } from 'react-native'; import TrackPlayer from 'react-native-track-player'; // 在组件的useEffect中添加监听 useEffect(() => { const handleAppStateChange = async (nextAppState) => { if (nextAppState === 'background' || nextAppState === 'inactive') { await TrackPlayer.stop(); await TrackPlayer.remove(); // 清理播放队列,彻底停止 } }; AppState.addEventListener('change', handleAppStateChange); return () => { AppState.removeEventListener('change', handleAppStateChange); }; }, []);
验证步骤
- 重新编译iOS项目
- 启动APP并开始播放音频
- 按Home键将APP切换到后台,确认音频停止
- 彻底关闭APP(从多任务栏划掉),确认音频不会继续播放
内容的提问来源于stack exchange,提问作者Sander van Maastricht
相关产品推荐
相关产品推荐

