在后台,iOS和Android中使音乐应用程序保持活动状态?

时间:2019-02-12 09:16:26

标签: flutter flutter-dependencies

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

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

当第一首歌曲完成播放时,AudioPlayerState.COMPLETED。我打了电话,播放新的歌曲网址。如果应用程序在前景中,则效果很好,但如果应用程序在背景中,则效果不佳。这种情况发生在最新版本的iOS上,而我在Android 5.0(而不是Android 8.0+)上发现了这一点。当我对此进行测试时,在Android Studio的“运行”标签中,它确实会向我发出呼叫,但不会播放歌曲,但是当我打开应用程序时,它会显示更新的专辑封面,该专辑封面也位于网址上(不在歌曲元数据)。如果我叫履历表,则从后台打开应用程序后,歌曲就会开始播放。

我不知道这是软件包的问题还是iOS的问题,我已经在Github软件包上打开了一个问题。但是,我认为,如果在我检查Xcode的背景音频之前将应用程序最小化,那么它在iOS上就不会播放歌曲了。

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;
      }
    };
  }
}

2 个答案:

答案 0 :(得分:1)

解决方案是iOS平台上的一个衬垫。

  

您在第一个视图控制器的init或   viewDidLoad方法:

     

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

     

https://stackoverflow.com/a/9721032/6024667

     

雨燕3   UIApplication.sharedApplication().beginReceivingRemoteControlEvents()

     

雨燕4   UIApplication.shared.beginReceivingRemoteControlEvents()

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

答案 1 :(得分:0)

您只需要在Xcode中启用“音频,Airplay和画中画”,如下所示。您需要添加功能“背景模式”。您可以在“签名和功能”标签中找到它:

enter image description here

您可以在官方文档中找到详细说明:https://developer.apple.com/documentation/avfoundation/media_assets_playback_and_editing/creating_a_basic_video_player_ios_and_tvos/enabling_background_audio