Сейчас я пытаюсь сделать это напрямую, вызвав Android FS с использованием MethodChannel, а затем запуск Dart Isolate внутри FS. Однако когда вызывается моя вторая точка входа, она не имеет доступа к моим плагинам, таким как Permission_handler и Record.
Вот как я запускаю DartIsolate из своей файловой системы в Kotlin, и это работает!
Код: Выделить всё
private fun startDartIsolate() {
val loader: FlutterLoader = FlutterInjector.instance().flutterLoader()
if (!loader.initialized()) {
loader.startInitialization(applicationContext)
}
applicationContext.let { ctx ->
loader.apply {
startInitialization(ctx)
ensureInitializationComplete(ctx, emptyArray())
}
flutterEngine = FlutterEngine(ctx, null, false, false)
flutterEngine?.serviceControlSurface?.attachToService(this, null, true)
val args: MutableList = MutableList(0) { "" }
val callbackLibraryPath = null
val callbackName = "second"
val entryPoint = DartExecutor.DartEntrypoint(
loader.findAppBundlePath(),
callbackName)
flutterEngine?.getDartExecutor()?.executeDartEntrypoint(entryPoint)
}
Код: Выделить всё
Exception has occurred.
MissingPluginException (MissingPluginException(No implementation found for method checkPermissionStatus on channel flutter.baseflow.com/permissions/methods))
Код: Выделить всё
@pragma('vm:entry-point')
void second() async {
WidgetsFlutterBinding.ensureInitialized();
DartPluginRegistrant.ensureInitialized();
final microphonePermission = await Permission.microphone.isGranted;
print("microphonePermission = $microphonePermission");
final accessNotificationPolicy = await Permission.accessNotificationPolicy.isGranted;
print("accessNotificationPolicy = $accessNotificationPolicy");
final notification = await Permission.notification.isGranted;
print("notification = $notification");
final record = AudioRecorder();
final inputDevices = await record.listInputDevices();
final inputDevice = inputDevices[1];
print(inputDevice);
if (await record.hasPermission()) {
print("Permission granted");
} else {
print("Permission denied");
return;
}
final recordConfig = RecordConfig(
encoder: AudioEncoder.pcm16bits, sampleRate: 16000, numChannels: 1, device: inputDevice);
final stream = await record.startStream(recordConfig);
int counter = 0;
stream.listen(
(data) async {
print(data.elementSizeInBytes);
counter++;
if (counter == 100) {
await record.stop();
}
},
onError: (error) {
print("onError error = ${error.toString()}");
},
onDone: () {
print("onDone");
},
);
}
Я попробовал все основные плагины Flutter для Android FS, а затем переключился на руководство из:
https://plugfox.dev/android-background- ... h-flutter/
Внутри второй точки входа из в этом руководстве по-прежнему выдается исключение «Отсутствует плагин».
Подробнее здесь: https://stackoverflow.com/questions/787 ... android-fs