如何解决ScheduledExecutorThread在对Dart插件进行回调时仅执行一次
Flutter插件帮助
我目前正在研究一个示例插件,该插件可从当前连接到移动设备的网络中检索wifi信息。我正在使用Flutter,并通过flutter终端命令为应用创建了样板。
我遇到的问题是当我尝试使用.invokeMethod(method,args)通过Java对Dart进行回调时。 Executor服务似乎只运行一次,然后停止。我在这里做错了什么,似乎无法在线找到答案?
下面是我的Java代码。
@Override
public void onMethodCall(@NonNull MethodCall call,@NonNull final Result result) {
class SendInfo implements Runnable {
@Override
public void run() {
System.out.println("Runnable operation invoked " + String.valueOf(count) + " times.");
count++;
WifiManager wifiManager = (WifiManager) appContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String ssid = wifiManager.getConnectionInfo().getSSID();
int strength = wifiManager.getConnectionInfo().getRssi();
Map<String,Integer> args = new HashMap<>();
args.put(ssid,strength);
System.out.println(args);
channel.invokeMethod("receiveInfo",args);
}
}
if (call.method.equals("getSSID")) {
String ssid = getInfo().getSSID();
result.success(ssid);
} else if (call.method.equals("getStrength")){
String strength = String.valueOf(getInfo().getRssi());
result.success(strength);
} else if (call.method.equals("start")){
System.out.println("Start method invoked.");
ScheduledFuture<?> ssidFuture = executorService.scheduleAtFixedRate(new SendInfo(),1,TimeUnit.SECONDS);
} else if (call.method.equals("stop")){
}
else {
result.notImplemented();
}
这里是插件的Dart端,现在我只是在尝试打印检索到的值。另一个问题是Dart似乎无法将收到的call.method与提供的String匹配,并且似乎完全跳过了switch语句。
class StatHandler {
static const MethodChannel _channel = const MethodChannel('WifiStats');
void init() {
_channel.setMethodCallHandler(_callbackHandler);
print("Method Channel set.");
start();
}
Future<String> getSSID() async {
final String name = await _channel.invokeMethod('getSSID');
print(name);
return name;
}
Future<String> getStrength() async {
final String strength = await _channel.invokeMethod('getStrength');
print(strength);
return strength;
}
void start() {
_channel.invokeMethod('start');
}
void stop() {
_channel.invokeMethod('stop');
}
Future<dynamic> _callbackHandler(MethodCall call) {
var callback = call.arguments;
var method = call.method;
print("Method Call: " + method);
switch (call.method) {
case "receiveInfo":
// handle data
print("<SSID,Strength>: " + callback);
return callback;
break;
default:
throw UnsupportedError("Error");
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。