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);
});
}