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)
解决方案是 iOS 端的单线。
您需要在第一个视图控制器的 init 或 viewDidLoad 方法中使用此代码:
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];斯威夫特 3
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()斯威夫特 4
UIApplication.shared.beginReceivingRemoteControlEvents()
将此代码添加到您的 iOS/Runner 目录中的 AppDelegate.m/AppDelegate.swift 中,就在返回之前。
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |