首页 > 解决方案 > audio_service 颤振包未启动

问题描述

我正在尝试使用 audio_service 包来允许我的播客播放应用程序进行后台控制。服务未启动。当我调用时AudioService.start(),什么都没有返回(我正在await使用这个函数并试图在它返回之后打印一条语句,但它永远不会返回。另外,当我第一次尝试播放一个项目时,它会正确评估AudioService.running为 false 然后尝试启动 AudioService(挂在start()函数上)。当我第二次点击播放时,它将评估AudioService.running为 true(即使启动函数从未返回),然后会抛出此错误:

E/flutter ( 8726): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(Attempt to invoke virtual method 'void io.flutter.plugin.common.MethodChannel.invokeMethod(java.lang.String, java.lang.Object, io.flutter.plugin.common.MethodChannel$Result)' on a null object reference, null, null)
E/flutter ( 8726): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572:7)
E/flutter ( 8726): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161:18)
E/flutter ( 8726): <asynchronous suspension>
E/flutter ( 8726): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
E/flutter ( 8726): #3      AudioService.play (package:audio_service/audio_service.dart:895:20)

这是我调用 start 函数的代码:

    if(AudioService.running) {
      print('playing audio service: ${AudioService.running}');
      AudioService.play();
    } else {
      MediaItem mediaItem = MediaItem(
        id: newPostPod.audioUrl,
        title: newPostPod.titleTextString(),
        artist: newPostPod.subtitleTextString(),
      );
      print('starting audio service');
      bool started = await AudioService.start(
        backgroundTaskEntrypoint: _backgroundTaskEntrypoint,
        params: {'mediaItem': mediaItem.toJson()},
      );
      print('audio service started');
      if(AudioService.running) {
        print('starting to play via media service');
        AudioService.playMediaItem(mediaItem);
      } else {
        print('Audio Service not yet started: $started');
      }
    }

后台任务入口点的代码(它在任何其他类之外,因为它不在我在另一个问题中读到的必须是顶级的类中工作):

_backgroundTaskEntrypoint() {
  AudioServiceBackground.run(() => PlayerTask());
}

最后,onStart我的 BackgroundAudioTask 中的任何代码都没有运行(因为我的 onStart 顶部的打印语句没有运行)。所以我不确定这里发生了什么。它没有给我一个明确的错误,也没有真正提示从哪里开始调试 audio_service。

标签: flutterdart

解决方案


AudioService.connect();在启动服务之前调用将解决错误。


推荐阅读