react-native-track-player@3.2.0:关闭应用后播放通知未消失求助
解决react-native-track-player@3.2.0 关闭应用后通知残留问题
针对你遇到的关闭应用后音频停止但播放通知仍存在的问题,可以尝试以下几种解决方案:
1. 监听AppState,在应用退出时主动清理播放器状态
在应用入口(如index.js)中添加AppState监听,当应用进入后台或闲置状态时,主动重置并销毁播放器,强制清除通知:
import { AppState } from 'react-native'; let appStateSubscription; const trackSetup = async () => { await TrackPlayer.setupPlayer({ waitForBuffer: false }); await TrackPlayer.updateOptions({ android: { appKilledPlaybackBehavior: AppKilledPlaybackBehavior.StopPlaybackAndRemoveNotification, }, notificationCapabilities: [ Capability.Play, Capability.Pause, Capability.JumpBackward, Capability.JumpForward, Capability.SeekTo, ], capabilities: [ Capability.Play, Capability.Pause, Capability.JumpBackward, Capability.JumpForward, Capability.SeekTo, ], compactCapabilities: [Capability.Play, Capability.Pause], }); console.log(AppState.currentState, 'Track Player Setup...'); // 监听应用状态变化 appStateSubscription = AppState.addEventListener('change', async (nextAppState) => { if (nextAppState === 'background' || nextAppState === 'inactive') { await TrackPlayer.reset(); await TrackPlayer.destroy(); } }); }; // 若在组件内初始化,记得在卸载时移除监听 // useEffect(() => { // trackSetup(); // return () => appStateSubscription?.remove(); // }, []);
2. 确认Android原生配置正确性
检查android/app/src/main/AndroidManifest.xml中的服务声明,确保播放器服务能正确响应应用销毁事件:
<service android:name="com.doublesymmetry.trackplayer.service.MusicService" android:foregroundServiceType="mediaPlayback" /> <service android:name="com.doublesymmetry.trackplayer.service.MusicServiceBinder" /> <receiver android:name="com.doublesymmetry.trackplayer.service.MusicBroadcastReceiver" />
3. 初始化时清除旧状态
在播放器初始化前,先清除可能残留的播放器状态,避免旧通知继续显示:
const trackSetup = async () => { // 先清除旧状态 await TrackPlayer.reset().catch(() => {}); await TrackPlayer.destroy().catch(() => {}); await TrackPlayer.setupPlayer({ waitForBuffer: false }); // 后续updateOptions代码保持不变 };
4. 版本调整(备选)
若上述方法无效,3.2.0版本可能存在已知bug,可尝试升级到3.x分支的最新稳定版,或降级到3.1.x版本测试。
内容的提问来源于stack exchange,提问作者Ambreen Kanwal
相关产品推荐
相关产品推荐

