flutter如何实现just_audio_back音频播放功能
在Flutter项目中集成just_audio_background插件时遇到问题:按照文档配置后,后台音频播放功能仍无法正常工作。具体表现为应用退到后台时音频停止,通知栏也未显示播放控件。已尝试设置AndroidManifest.xml的foregroundService权限和AudioService.init()初始化,但未生效。请问正确的后台音频实现流程是什么?是否需要额外处理iOS端的配置?能否提供完整的代码示例?
2 回复
使用just_audio_back插件实现音频播放,步骤如下:
- 添加依赖:在
pubspec.yaml中添加just_audio_back。 - 初始化播放器:
AudioPlayer player = AudioPlayer(); - 加载音频:
player.setUrl('音频URL') - 控制播放:
player.play()、player.pause()、player.stop() - 释放资源:
player.dispose()
注意:该插件适用于后台播放,需配置Android和iOS权限。
更多关于flutter如何实现just_audio_back音频播放功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中实现音频播放功能,推荐使用 just_audio 包。它支持本地和网络音频,并提供了丰富的控制功能。以下是实现步骤:
1. 添加依赖
在 pubspec.yaml 文件中添加依赖:
dependencies:
just_audio: ^0.9.35
audio_session: ^0.1.20 # 可选,用于配置音频会话
2. 基本实现代码
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
@override
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
final AudioPlayer _audioPlayer = AudioPlayer();
@override
void initState() {
super.initState();
_initAudio();
}
Future<void> _initAudio() async {
try {
// 播放网络音频
await _audioPlayer.setUrl('https://example.com/audio.mp3');
// 或播放本地音频
// await _audioPlayer.setAsset('assets/audio.mp3');
} catch (e) {
print("Error loading audio: $e");
}
}
@override
void dispose() {
_audioPlayer.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
// 播放/暂停按钮
StreamBuilder<PlayerState>(
stream: _audioPlayer.playerStateStream,
builder: (context, snapshot) {
final playerState = snapshot.data;
final processingState = playerState?.processingState;
final playing = playerState?.playing;
if (processingState == ProcessingState.loading ||
processingState == ProcessingState.buffering) {
return CircularProgressIndicator();
} else if (playing != true) {
return IconButton(
icon: Icon(Icons.play_arrow),
onPressed: _audioPlayer.play,
);
} else {
return IconButton(
icon: Icon(Icons.pause),
onPressed: _audioPlayer.pause,
);
}
},
),
// 进度条
StreamBuilder<Duration>(
stream: _audioPlayer.positionStream,
builder: (context, snapshot) {
final position = snapshot.data ?? Duration.zero;
return Slider(
value: position.inSeconds.toDouble(),
max: _audioPlayer.duration?.inSeconds.toDouble() ?? 1.0,
onChanged: (value) {
_audioPlayer.seek(Duration(seconds: value.toInt()));
},
);
},
),
],
),
);
}
}
3. 关键功能说明
- 加载音频:使用
setUrl()加载网络音频,或setAsset()加载本地资源。 - 播放控制:通过
play()、pause()、stop()控制播放。 - 进度控制:使用
seek()跳转位置,通过positionStream监听进度。 - 状态监听:
playerStateStream可监听播放状态(加载中/播放中/暂停等)。
4. 高级配置(可选)
使用 audio_session 包配置音频会话,优化后台播放和耳机控制:
import 'package:audio_session/audio_session.dart';
void configureAudioSession() async {
final session = await AudioSession.instance;
await session.configure(AudioSessionConfiguration.music());
}
注意事项
- 需要在
AndroidManifest.xml和Info.plist中声明网络权限(网络音频)。 - 后台播放需配置后台音频权限(Android 需后台服务,iOS 需后台模式)。
以上代码提供了基础播放功能,可根据需要扩展播放列表、循环模式等功能。

