【问题标题】:flutter audio_service not playing audio颤动的audio_service不播放音频
【发布时间】:2020-12-18 01:45:02
【问题描述】:

所以我按照教程https://github.com/ryanheise/audio_service/wiki/Tutorial

但是我没有成功让它工作。 我的第一个问题是 final _completer = Completer(); 它们不是 Completer 类,因此会引发错误。

而且他们提供的代码似乎并没有触发下面的类。


/*AUDIO PLAYER*/
class AudioPlayerTask extends BackgroundAudioTask {
  final _audioPlayer = AudioPlayer();
 // final _completer = Completer();

  @override
  Future<void> onStart(Map<String, dynamic> params) async {
    // Connect to the URL
    print("test");

    await _audioPlayer.setUrl("https://perth.adstichr.com.au/station/DRN1?uuid=0000-0000-0000-0000");
    // Now we're ready to play
    _audioPlayer.play();
  }

  @override
  Future<void> onStop() async {
    // Stop playing audio
    await _audioPlayer.stop();
    // Shut down this background task
    await super.onStop();
  }
}

完整代码是

import 'package:flutter/material.dart';
import 'package:audio_service/audio_service.dart';
import 'package:just_audio/just_audio.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: AudioServiceWidget(child: MainScreen()),
    );
  }
}

class MainScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Example")),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            RaisedButton(child: Text("Start"), onPressed: start),
            RaisedButton(child: Text("Stop"), onPressed: stop),
          ],
        ),
      ),
    );
  }

  start() =>
      AudioService.start(backgroundTaskEntrypoint: _backgroundTaskEntrypoint);

  stop() => AudioService.stop();


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

}



/*AUDIO PLAYER*/
class AudioPlayerTask extends BackgroundAudioTask {
  final _audioPlayer = AudioPlayer();
  // final _completer = Completer();

  @override
  Future<void> onStart(Map<String, dynamic> params) async {
    // Connect to the URL
    print("test");

    await _audioPlayer.setUrl("https://perth.adstichr.com.au/station/DRN1?uuid=0000-0000-0000-0000");
    // Now we're ready to play
    _audioPlayer.play();
  }

  @override
  Future<void> onStop() async {
    // Stop playing audio
    await _audioPlayer.stop();
    // Shut down this background task
    await super.onStop();
  }
}

【问题讨论】:

  • Completer 应该是来自dart:async 库的类。你导入了吗?
  • @JigarPatel 我收到了你的评论,但示例代码仍然无法播放
  • 我正在测试代码,显然 AudioService.start() 返回 false。我不太清楚为什么会这样,但也许这可以帮助您找到问题
  • @naif.mazen 所以我认为他们的代码很重要?
  • 对于完成者的问题,您需要导入此 import 'dart:async';

标签: android flutter


【解决方案1】:

它也不适合我。请注意,要在 Android 上使用 audio_service,您必须将以下行放入 AndroidManifest.xml。但是,当我这样做时,com.ryanheise.audioservice.MediaButtonReceiver 会给出错误“清单中引用的类 com.ryanheise.audioservice.AudioService,在项目或库中找不到”,我不确定是什么做这件事。

这需要进入 Manifest。请参阅文档。

<manifest ...>
  <uses-permission android:name="android.permission.WAKE_LOCK"/>
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

  <application ...>

    ...

    <service android:name="com.ryanheise.audioservice.AudioService">
      <intent-filter>
        <action android:name="android.media.browse.MediaBrowserService" />
      </intent-filter>
    </service>

    <receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver" >
      <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
      </intent-filter>
    </receiver> 
  </application>
</manifest>

【讨论】:

    【解决方案2】:

    我按照文档我们必须在顶层函数上添加方法_backgroundTaskEntrypoint(),所以你应该把函数移到类之外。

    // Must be a top-level function
    void _backgroundTaskEntrypoint() {
       AudioServiceBackground.run(() => AudioPlayerTask());
    }
    
    /*AUDIO PLAYER*/
    class AudioPlayerTask extends BackgroundAudioTask {
      final _audioPlayer = AudioPlayer();
      ...
    }
    

    【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 2022-08-23
    • 2020-07-14
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多