#flutter #dart #playsound
#сбой #dart #воспроизведение звука
Вопрос:
я создаю обратный отсчет с будильником, я использую библиотеку audioplayers для звука, я пытаюсь воспроизводить звуковой сигнал в разные моменты, поэтому я попробовал этот код :
если (таймер == «00:50») player.play («bip.wav»)
и это не сработало должным образом, когда я перезапускаю приложение, звук перестает работать, и я получаю эту ошибку :
E/MediaPlayerNative( 6964): Unable to create media player
E/AudioplayersPlugin( 6964): Unexpected error!
E/AudioplayersPlugin( 6964): java.lang.RuntimeException: Unable to access resource
E/MediaPlayerNative( 7313): pause called in state 0, mPlayer(0xe8091b60)
E/AudioplayersPlugin( 7313): java.lang.RuntimeException: Unable to access resource
E/AudioplayersPlugin( 7313): at xyz.luan.audioplayers.WrappedMediaPlayer.setSource(WrappedMediaPlayer.java:423)
E/AudioplayersPlugin( 7313): at xyz.luan.audioplayers.WrappedMediaPlayer.setUrl(WrappedMediaPlayer.java:61)
E/AudioplayersPlugin( 7313): at xyz.luan.audioplayers.AudioplayersPlugin.handleMethodCall(AudioplayersPlugin.java:82)
E/AudioplayersPlugin( 7313): at xyz.luan.audioplayers.AudioplayersPlugin.onMethodCall(AudioplayersPlugin.java:60)
E/AudioplayersPlugin( 7313): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AudioplayersPlugin( 7313): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AudioplayersPlugin( 7313): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/AudioplayersPlugin( 7313): at android.os.MessageQueue.nativePollOnce(Native Method)
E/AudioplayersPlugin( 7313): at android.os.MessageQueue.next(MessageQueue.java:326)
E/AudioplayersPlugin( 7313): at android.os.Looper.loop(Looper.java:160)
это мой код :
import 'package:flutter/cupertino.dart';
import 'package:audioplayers/audio_cache.dart';
import 'package:flutter/material.dart';
var player = AudioCache();
class Alarm extends StatefulWidget {
@override
_AlarmState createState() => _AlarmState();
}
class _AlarmState extends State<Alarm> with TickerProviderStateMixin {
AnimationController animationController;
String get timer {
Duration duration =
animationController.duration * animationController.value;
return "${(duration.inMinutes).toString().padLeft(2,'0')}:${(duration.inSeconds % 60).toString().padLeft(2, '0')}";
}
@override
void initState() {
super.initState();
animationController =
AnimationController(
vsync: this,
duration: Duration(minutes: 1)
);
}
void Countdown() {
if (animationController.isAnimating) {
animationController.stop();
} else {
animationController.reverse(
from: animationController.value == 0.0
? 1.0
: animationController.value);
};
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment: FractionalOffset.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
height: 90,
),
AnimatedBuilder(
animation: animationController,
builder: (_, Widget child) {
**if (timer == "00:50") player.play("bip.wav");**
return Text(timer,
style: TextStyle(
fontWeight: FontWeight.w200,
color: Colors.white,
fontSize: 100.0,
)
);
}
),
Container(
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: <Widget>[
FloatingActionButton(
elevation: 0.0,
child: AnimatedBuilder(
animation: animationController,
builder: (_, Widget child) {
return Icon(
animationController
.isAnimating
? Icons.pause
: Icons.play_arrow,
color: Colors.white,
size: 50,
);
}),
backgroundColor: Colors.transparent,
splashColor: Colors.white,
onPressed: () {
Countdown();
setState(() {
Icon(animationController
.isAnimating
? Icons.pause
: Icons.play_arrow);
});
},
)
],
),
)
],
),
),
],
),
),
);
}
}
Спасибо!
Комментарии:
1. Вы нашли какое-либо решение?
2. попробуйте использовать более старую версию audioplayers, 0.10.0 или 0.12.0 , я не знаю почему, но для меня это работает хорошо до этого момента, вы можете увидеть это здесь github.com/luanpotter/audioplayers/issues/661
Ответ №1:
Вы должны использовать
Timer.periodic( ...)
таким образом, вы можете воспроизводить звук каждые 10 минут.
Комментарии:
1. решение таково … если (таймер == «00:50») player.play(‘bip.wav’) возвращает текст (таймер) . но это не сработало, я получаю эту ошибку, надеюсь, вы можете помочь: E / MediaPlayerNative(9973): не удалось создать медиаплеер E / AudioplayersPlugin(9973): неожиданная ошибка!