我正在尝试将本地代码添加到我的flutter应用程序中,它基本上只有两个方法来播放和停止警报。我在MainActivity和dart的android中添加了本机代码,但是我得到了异常:未处理的异常:MissingPluginException(在com.example.Smart_ playAlarm /android_ring_manager上找不到方法警报的实现)
已尝试:
(i)。卸载/重新安装应用程序
(ii)。颤振清洁和颤振运行
(iii)。更改频道名称
“”“
private static final String CHANNEL_NAME = "com.example.smart_alarm/android_ring_manager";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
startService(new Intent(this, AlarmRingerService.class));
new MethodChannel(getFlutterView(), CHANNEL_NAME).setMethodCallHandler((call, result) -> {
if (call.method.equals("playAlarm")) {
System.out.println("MainActivity: Playing alarm");
AlarmRingerService.playAlarm();
result.success(null);
} else if (call.method.equals("stopAlarm")) {
System.out.println("MainActivity: Stopping alarm");
AlarmRingerService.stopAlarm();
result.success(null);
}
});
}Flutter dart code: This is executed from alarm callback in separate isolate
import 'package:flutter/services.dart';
class AlarmRingManager {
static const MethodChannel _channel =
const MethodChannel('com.example.smart_alarm/android_ring_manager');
static Future<void> playAlarm() async {
try {
await _channel.invokeMethod('playAlarm');
} on PlatformException catch (e) {
print('Unable to call play alarm on platform channel $e');
}
}
static Future<void> stopAlarm() async {
try {
await _channel.invokeMethod('stopAlarm');
} on PlatformException catch (e) {
print('Unable to call stop alarm on platform channel $e');
}
}
}我是不是漏掉了什么?我是否需要在其他地方或清单中注册我的方法调用处理程序?
--编辑
所以我对它进行了更多的调试,发现问题不是平台通道回调。问题是我从android_alarm_manager回调中调用了平台通道方法。由于android_alarm_manager在不同的隔离中运行,并且方法调用处理程序设置在主隔离中,因此它无法找到它。
有没有一种方法可以在android BE服务中定义平台通道,使其始终对所有隔离可用?如果我将它用于现有的插件,我可以看到它的工作,但我不确定如何添加我自己的代码,以便本机平台通道对所有隔离都可用。
发布于 2021-08-25 09:19:58
到目前为止,我发布了这个答案,Flutter不支持从隔离调用本机通道调用。
请查看:https://github.com/flutter/flutter/issues/13937
另外还有一些很有前途的插件,比如:https://pub.dev/packages/flutter_isolate
但它们也有自己的复杂性,需要调用辅助FlutterEngine并在其上运行调用。
https://stackoverflow.com/questions/57798544
复制相似问题