繁体   English   中英

flutter audio_service 不播放音频

[英]flutter audio_service not playing audio

所以我按照教程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();
  }
}

我按照文档我们必须在顶级函数上添加_backgroundTaskEntrypoint()方法,因此您应该将该函数移到类之外。

// Must be a top-level function
void _backgroundTaskEntrypoint() {
   AudioServiceBackground.run(() => AudioPlayerTask());
}

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

它也不适合我。 请注意,要在 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM