Flutter音频文件播放插件audiofileplayer的使用
Flutter音频文件播放插件audiofileplayer的使用
audiofileplayer
是一个用于Flutter项目的音频播放插件,它支持从项目资源、本地文件、字节数组和远程URL读取音频数据。以下是该插件的主要功能:
- 从Flutter项目资源、本地文件、字节数组或远程URL读取音频数据。
- 支持快进到指定位置。
- 提供回调函数以获取已加载音频时长、当前播放位置以及播放完成的通知。
- 支持循环播放、调整音量、暂停/恢复播放。
- 支持多个音频播放器,并具有内存管理功能。
- 支持后台音频播放。
- 可设置操作系统显示的支持媒体操作和元数据。
- 在Android通知中添加自定义媒体按钮。
开始使用
要使用此插件,请在 pubspec.yaml
文件中将 audiofileplayer
添加为依赖项。
dependencies:
audiofileplayer: ^0.3.2 # 请确保使用最新版本
然后执行 flutter pub get
来安装插件。
示例代码
下面是一个完整的示例应用程序,展示了如何使用 audiofileplayer
插件进行不同场景下的音频播放。
import 'package:flutter/material.dart';
import 'package:audiofileplayer/audiofileplayer.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AudioPlayerExample(),
);
}
}
class AudioPlayerExample extends StatefulWidget {
@override
_AudioPlayerExampleState createState() => _AudioPlayerExampleState();
}
class _AudioPlayerExampleState extends State<AudioPlayerExample> {
late Audio _audio;
bool _isPlaying = false;
double? _durationSeconds;
double? _positionSeconds;
@override
void initState() {
super.initState();
_loadAudio();
}
Future<void> _loadAudio() async {
_audio = await Audio.load('assets/audio/sample.mp3',
onDuration: (double durationSeconds) =>
setState(() => _durationSeconds = durationSeconds),
onPosition: (double positionSeconds) =>
setState(() => _positionSeconds = positionSeconds),
onComplete: () => setState(() => _isPlaying = false));
}
@override
void dispose() {
_audio.dispose();
super.dispose();
}
void _playPause() {
if (_isPlaying) {
_audio.pause();
} else {
_audio.play();
}
setState(() => _isPlaying = !_isPlaying);
}
String? _formatTime(double? seconds) {
if (seconds == null) return null;
final int minutes = (seconds ~/ 60).toInt();
final int secs = (seconds % 60).toInt();
return '$minutes:${secs.toString().padLeft(2, '0')}';
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Audio Player Example')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
ElevatedButton(
onPressed: _playPause,
child: Text(_isPlaying ? 'Pause' : 'Play'),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(_formatTime(_positionSeconds) ?? '0:00'),
Text(_formatTime(_durationSeconds) ?? '0:00'),
],
),
Slider(
value: _positionSeconds != null && _durationSeconds != null
? _positionSeconds! / _durationSeconds!
: 0.0,
onChanged: (double val) {
if (_durationSeconds != null) {
_audio.seek(val * _durationSeconds!);
}
},
),
],
),
),
);
}
}
后台音频播放设置
为了使音频在应用最小化时继续播放,你需要对iOS和Android平台进行一些额外配置。
iOS
- 打开Xcode并启用 “audio” 背景模式能力。
- 或者,在
Info.plist
文件中添加以下内容:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Android
- 在
AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
- 在
<application>
标签内添加以下服务声明:
<service android:name="com.google.flutter.plugins.audiofileplayer.AudiofileplayerService"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
<receiver android:name="androidx.media.session.MediaButtonReceiver" >
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
- 如果需要自定义通知图标,可以在
res/drawable-{density}
目录下添加适当尺寸的图标,并在AndroidManifest.xml
中指定:
<meta-data android:name="ic_audiofileplayer" android:value="drawable/notification_icon" />
通过以上步骤,你就可以在Flutter项目中使用 audiofileplayer
插件实现音频播放功能了。
更多关于Flutter音频文件播放插件audiofileplayer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频文件播放插件audiofileplayer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用audiofileplayer
插件来播放音频文件的示例代码。audiofileplayer
是一个流行的Flutter插件,用于播放本地或网络上的音频文件。
首先,确保你已经在pubspec.yaml
文件中添加了audiofileplayer
依赖:
dependencies:
flutter:
sdk: flutter
audiofileplayer: ^0.18.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用audiofileplayer
插件:
- 导入包:
import 'package:flutter/material.dart';
import 'package:audiofileplayer/audiofileplayer.dart';
- 定义AudioFilePlayer实例:
在你的State类中,定义一个AudioFilePlayer
实例:
class _MyHomePageState extends State<MyHomePage> {
AudioFilePlayer? audioPlayer;
String audioUrl = 'path/to/your/audio/file.mp3'; // 可以是本地路径或网络URL
@override
void initState() {
super.initState();
audioPlayer = AudioFilePlayer();
_loadAudio();
}
void _loadAudio() async {
await audioPlayer!.open(Audio.network(audioUrl)); // 如果是本地文件,使用Audio.file(File('path/to/file'))
setState(() {});
}
@override
void dispose() {
audioPlayer?.dispose();
super.dispose();
}
- 创建播放控件:
在你的UI中,添加播放、暂停和停止按钮:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('AudioFilePlayer Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: audioPlayer!.value.isPlaying
? () => audioPlayer!.pause()
: () async {
if (!audioPlayer!.value.isInitialized) {
await _loadAudio();
}
await audioPlayer!.play();
},
child: Text(audioPlayer!.value.isPlaying ? 'Pause' : 'Play'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => audioPlayer!.stop(),
child: Text('Stop'),
),
],
),
),
);
}
- 处理播放状态:
你可以监听音频播放器的状态,以便更新UI或执行其他操作。例如,显示播放时间、进度条等。以下是一个简单的示例,显示当前播放状态:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('AudioFilePlayer Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'${audioPlayer!.value.position.inMilliseconds.toStringAsFixed(2)} ms / ${audioPlayer!.value.duration?.inMilliseconds ?? 0} ms',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: audioPlayer!.value.isPlaying
? () => audioPlayer!.pause()
: () async {
if (!audioPlayer!.value.isInitialized) {
await _loadAudio();
}
await audioPlayer!.play();
},
child: Text(audioPlayer!.value.isPlaying ? 'Pause' : 'Play'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => audioPlayer!.stop(),
child: Text('Stop'),
),
],
),
),
);
}
以上代码展示了如何在Flutter项目中使用audiofileplayer
插件来播放音频文件,并提供了播放、暂停和停止的功能,同时还显示了当前播放时间和总时长。
请确保根据你的实际需求调整音频文件的路径和UI布局。