Flutter record sound on background

18 views Asked by At

I know this doesn't seem to comply with privacy policies, but I only want this for personal use. I try to record sound at certain intervals while the application is running in the background. workmanager works fine but I can't record audio in the background. Please help me with this?

import 'dart:isolate';
import 'package:android_alarm_manager_plus/android_alarm_manager_plus.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:record/record.dart';
import 'package:record_sound/deneme.dart';
import 'package:workmanager/workmanager.dart';

const simplePeriodic1HourTask = "simplePeriodic1HourTask";

@pragma('vm:entry-point')
void printHello() {
  final DateTime now = DateTime.now();
  final int isolateId = Isolate.current.hashCode;
  _configureWorkManager();
  debugPrint(
      "[$now] Hello, world! isolate=${isolateId} function='$printHello'");
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await AndroidAlarmManager.initialize();
  runApp(
    const ExamplesApp(),
  );
  const int helloAlarmID = 0;
  await AndroidAlarmManager.periodic(
      const Duration(minutes: 1), helloAlarmID, printHello);
}

Future<void> _configureWorkManager() async {
  await Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
  await Workmanager().registerOneOffTask(
    simplePeriodic1HourTask,
    simplePeriodic1HourTask,
  );
}
@pragma(
    'vm:entry-point') // Mandatory if the App is obfuscated or using Flutter 3.1+
void callbackDispatcher() {
  Workmanager().executeTask((task, inputData) async {
    if (task == simplePeriodic1HourTask) {
      final record = AudioRecorder();
      var downloadsDir = await getDownloadsDirectory();
      downloadsDir ??= await getApplicationDocumentsDirectory();
      var mPath = '${downloadsDir.path}/audio.pcm';
      // Start recording to file
      await record.start(const RecordConfig(), path: mPath);
      debugPrint("record start");
      await Future.delayed(const Duration(minutes: 1));
      final path = await record.stop();
      await record.dispose();
      debugPrint("record done");
      return Future.value(true);
    }
    return Future.value(false);
  });
}
0

There are 0 answers