我正在尝试使用audio_service包来允许对我的播客播放应用程序进行后台控制。服务未启动。当我调用AudioService.start()时,什么也没有返回(我正在await这个函数,并试图在这个函数返回后打印一条语句,但它再也没有返回。此外,当我第一次尝试播放一个项目时,它会正确地将AudioService.running求值为false,然后尝试启动AudioService (挂起start()函数)。当我再次点击play时,它会将AudioService.running求值为true (即使start函数从未返回),然后抛出以下错误:
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());
}最后,我的BackgroundAudioTask中的onStart中似乎没有任何代码正在运行(因为我的onStart顶部的打印语句没有运行)。所以我不知道这是怎么回事。它没有给我一个明确错误,也没有给我任何关于从哪里开始调试audio_service的提示。
发布于 2020-10-27 02:16:43
在启动服务之前调用AudioService.connect();可以解决这个错误。
发布于 2021-04-02 00:23:28
对我来说,AudioService.start()将会冻结,直到我根据audio_service自述文件将WAKE_LOCK和FOREGROUND_SERVICE权限添加到AndroidManifest.xml文件。
https://stackoverflow.com/questions/64531709
复制相似问题