Код: Выделить всё
import 'package:flutter/material.dart';
import 'package:flutter_sound/flutter_sound.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Audio Recorder',
theme: ThemeData(primarySwatch: Colors.blue),
home: AudioRecorderWidget(),
);
}
}
class AudioRecorderWidget extends StatefulWidget {
@override
_AudioRecorderWidgetState createState() => _AudioRecorderWidgetState();
}
class _AudioRecorderWidgetState extends State {
final FlutterSoundRecorder _recorder = FlutterSoundRecorder();
final FlutterSoundPlayer _player = FlutterSoundPlayer();
bool isRecording = false;
String? filePath;
@override
void initState() {
super.initState();
initAudio();
}
Future initAudio() async {
await _recorder.openRecorder();
await _player.openPlayer();
}
Future startRecording() async {
try {
Directory appDocDir = await getApplicationDocumentsDirectory();
filePath = '${appDocDir.path}/recorded_audio.aac';
await _recorder.startRecorder(toFile: filePath);
setState(() {
isRecording = true;
});
} catch (e) {
print("Error starting recording: $e");
}
}
Future stopRecording() async {
try {
await _recorder.stopRecorder();
setState(() {
isRecording = false;
});
} catch (e) {
print("Error stopping recording: $e");
}
}
Future playRecording() async {
if (filePath != null) {
await _player.startPlayer(fromURI: filePath);
}
}
@override
void dispose() {
_recorder.closeRecorder();
_player.closePlayer();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Audio Recorder')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: isRecording ? null : startRecording,
child: Text('Start Recording'),
),
ElevatedButton(
onPressed: isRecording ? stopRecording : null,
child: Text('Stop Recording'),
),
ElevatedButton(
onPressed: !isRecording && filePath != null ? playRecording : null,
child: Text('Play Recording'),
),
if (isRecording)
Padding(
padding: const EdgeInsets.all(8.0),
child: CircularProgressIndicator(),
),
],
),
),
);
}
}
Когда я запускаю это приложение, вход микрофона перестает улавливать звук через несколько секунд, когда приложение переходит в фоновый режим. Как только я снова открываю приложение, микрофон возобновляет запись правильно.
Что я пробовал
Код: Выделить всё
I've read about using Picture-in-Picture mode to keep the app "active," but I would like to explore other options.
I've looked into Flutter's documentation but couldn't find a way to keep the audio recording active in the background.
Код: Выделить всё
I want to continue recording audio even when the app is in the background.
I'm aware that iOS and Android have some restrictions regarding background services for battery optimization, but I'd like to know if there is a workaround or permission that allows continuous microphone usage.
Код: Выделить всё
Flutter version: 3.x
Plugin: flutter_sound for audio recording
Как сохранить запись звука активной, когда приложение работает в фоновом режиме? Существуют ли разрешения, настройки или какие-либо конкретные пакеты, которые мне следует использовать для достижения такого поведения во Flutter?
Будем очень признательны за любые рекомендации или решения!
Подробнее здесь: https://stackoverflow.com/questions/790 ... -backgroun