让音乐应用在后台、iOS 和 Android 中保持活跃?

pun*_*ife 7 flutter flutter-dependencies

我正在使用 Flutter 构建一个音乐播放应用程序。它可以帮助我作为一个开发人员为两个平台构建一次应用程序。但是,我在两个平台上都遇到了一些小问题。虽然我已经克服了其中的一些障碍,但我还是无法找出一个主要的错误/问题,这只是为了制作音乐应用程序的目的。如果应用程序不在前台,音乐不会改变。

我正在使用包:audioplayers(https://pub.dartlang.org/packages/audioplayers)。我的应用程序正在播放歌曲,mp3 文件在线托管并具有单独的链接。

当第一首歌曲完成播放时,AudioPlayerState.COMPLETED。我打电话玩,新的歌曲网址。如果应用程序在前台,这可以正常工作,但如果应用程序在后台,则它不起作用。这种情况发生在最新版本的 iOS 上,我在 Android 5.0(而不是 Android 8.0+)上发现了这一点。在 Android Studio 的 RUN 选项卡中,当我对此进行测试时,它确实向我显示已拨打电话,但歌曲没有播放,但是当我打开应用程序时,它确实显示了更新的专辑封面,该专辑封面也位于 url 上(不在歌曲元数据)。如果我调用简历,从后台打开应用程序备份后,歌曲开始播放。

我不知道这是包的问题还是 iOS 的问题,我在包 Github 上打开了一个问题。但是,我相信 iOS 和以前一样,如果在我检查 Xcode 中的背景音频之前将应用程序最小化,它就不会播放歌曲。

import 'package:flutter/material.dart';
import 'package:audioplayers/audioplayers.dart';
import 'dart:math';

AudioPlayer audioPlayer = new AudioPlayer();

class MusicPlay {
  MusicPlay() {
    _initAudioPlayer();
  }

  play(String audioURL) async {
    int result = await audioPlayer.play(audioURL);
    if (result == 1) {
      // success
    }
  }

  nextSong() async {
    play(String nextAudioURL)
  }

  void _initAudioPlayer() {
    audioPlayer.audioPlayerStateChangeHandler = (AudioPlayerState state) {
      switch (state) {
        case AudioPlayerState.PLAYING:
          break;
        case AudioPlayerState.PAUSED:
          break;
        case AudioPlayerState.STOPPED:
          break;
        case AudioPlayerState.COMPLETED:
          nextSong();
          break;
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

pun*_*ife 5

解决方案是 iOS 端的单线。

您需要在第一个视图控制器的 init 或 viewDidLoad 方法中使用此代码:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

/sf/answers/680472271/

斯威夫特 3 UIApplication.sharedApplication().beginReceivingRemoteControlEvents()

斯威夫特 4 UIApplication.shared.beginReceivingRemoteControlEvents()

将此代码添加到您的 iOS/Runner 目录中的 AppDelegate.m/AppDelegate.swift 中,就在返回之前。

  • 只是想补充一点,它还需要在 XCode 目标中设置功能,如下所示:https://developer.apple.com/documentation/avfoundation/media_assets_playback_and_editing/creating_a_basic_video_player_ios_and_tvos/enabling_background_audio (4认同)