无法在 iOS 颤动中从后台锁定时资产中播放 mp3 文件

问题描述

当我尝试在 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'),],);
  }
}

您可以按如下方式重现此错误

  1. 复制粘贴上面的代码片段。
  2. 构建发布版本并将其部署在任何物理 iOS 设备上。
  3. 点击按钮并锁定您的 iPhone。

就我而言,我使用的是 iPhone 8 和 iOS 14.4

是否有任何可能的替代解决方案可以让我在由 iOS 中的某些功能触发时在后台播放音乐?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)