Flutter中使用just_audio_background结合Workmanager无法后台播放本地音频
后台播放本地音频失败(Workmanager触发场景)
我无法在后台播放本地音频。我使用Workmanager定期运行任务,需要时播放声音——也就是直接从后台启动音频,和多数先通过点击播放按钮启动再切后台的示例不同。遗憾的是音频无法播放,我已参照官方示例代码,仅差异在于使用Workmanager。
import 'package:flutter/material.dart'; import 'package:just_audio/just_audio.dart'; import 'package:just_audio_background/just_audio_background.dart'; class AudioPlayerService { static const audioFilePath = 'assets/audio/notification.wav'; final _playList = AudioSource.uri( Uri.parse("asset:///$audioFilePath"), tag: const MediaItem( id: 'notification', title: "Notification", ), ); Future<void> playNotification() async { AudioPlayer? player; try { player = AudioPlayer(); await player.setAudioSource(_playList); await player.play(); } catch (e, stackTrace) { debugPrintStack(stackTrace: stackTrace); } finally { player?.dispose(); } } }
若将该代码放在Widget的按钮点击事件下,音频可正常播放。
AndroidManifest.xml配置如下:
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/> <!-- just_audio_background --> <activity android:name="com.ryanheise.audioservice.AudioServiceActivity" ... <service android:name="com.ryanheise.audioservice.AudioService" android:foregroundServiceType="mediaPlayback" android:exported="true"> <intent-filter> <action android:name="android.media.browse.MediaBrowserService" /> </intent-filter> </service> <receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver>
内容的提问来源于stack exchange,提问作者DeKekem
相关产品推荐
相关产品推荐

