问题描述
当我尝试在 iOS 中播放来自资产的音频文件 (.mp3) 时,出现了一个奇怪的错误。我正在为此使用音频播放器插件。我的任务是播放音频文件(来自本地存储或资产),经过一段时间的延迟,而应用程序不在前台,即屏幕被锁定或应用程序在最近的托盘中。问题是,当我在 iPhone 被锁定(例如在 timer.delay,Future.delay
之后等)的任何计时器功能之后尝试播放音频文件时,应用程序不会播放它。该应用程序在解锁 iPhone 后播放。还有一点需要注意的是,一切正常在应用的调试版本和未发布版本中都符合预期。还有一件事,我在 info.plist 中添加了后台音频权限,这是在后台播放音频所必需的。在 Android 中,一切正常。另外,我尝试了 Audio_service 插件,但效果不佳。
我的应用虚拟代码如下:
class AudioTesting extends StatefulWidget {
@override
_AudioTestingState createState() => _AudioTestingState();
}
class _AudioTestingState extends State<AudioTesting> {
@override
void initState() {
AudioPlayer _audioPlayer = AudioPlayer();
AudioCache _audioCache = AudioCache();
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return AudioServiceWidget(
child: Scaffold(
appBar: AppBar(
title: Text('Testing Screen'),),body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
RaisedButton(onpressed: (){
Future.delayed(Duration(seconds: 5),(){
_audioCache.load('$test.mp3');
_audioPlayer = await _audioCache.play('$test.mp3');
//This doesnt works in release mode,but works in debug mode,when played in Locked state
});
},child: Text('Future.delay func'),RaisedButton(onpressed: (){
sleep(Duration(seconds: 5));
_audioCache.load('$test.mp3');
_audioPlayer = await _audioCache.play('$test.mp3');
// This works completely fine in both version
},child: Text('sleep func'),],);
}
}
您可以按如下方式重现此错误:
- 复制粘贴上面的代码片段。
- 构建发布版本并将其部署在任何物理 iOS 设备上。
- 点击按钮并锁定您的 iPhone。
就我而言,我使用的是 iPhone 8 和 iOS 14.4
是否有任何可能的替代解决方案可以让我在由 iOS 中的某些功能触发时在后台播放音乐?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)