【问题标题】:Trouble sending Uint8List from Flutter to Android[Java] using method channels使用方法通道将 Uint8List 从 Flutter 发送到 Android[Java] 时遇到问题
【发布时间】:2021-05-02 01:25:09
【问题描述】:

我在 Flutter 上设置了一个方法通道,用于将 Uint8List 发送到 Android[Java]。 Android 正在接收数据,但看起来字节在 127 处包装。

例如:如果我从颤振中发送 [254, 100, 32],它在 Android 中显示为 [-2, 100, 32]。

基本上,列表中超过 127 的任何值都会转换为负值。

这是我在 Fluter 端设置方法通道的方式:

static const MethodChannel platform = MethodChannel(SEND_SERIAL_MESSAGE_TO_ANDROID);

Future<void> sendMessageToAndroid(List<int> message) async {

  final bool result = await platform.invokeMethod('parseMessage', message);
}

这就是我在 Android 端接收它的方式

@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    super.configureFlutterEngine(flutterEngine);
    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
            .setMethodCallHandler(
                    (call, result) -> {
                        if (call.method.equals("parseMessage")) {
                            byte[] message = call.arguments();
                            parseMessage(message);
                        } else {
                            result.notImplemented();
                        }
                    }

            );
}

private void parseMessage(byte[] message){
    Log.i(LOG_TAG, message.toString());
}

问题:如何阻止 Uint8List 中超过 127 的值在 Java 中转换为负值?

如果您需要查看我的更多代码,请告诉我。

【问题讨论】:

    标签: java android flutter dart flutter-method-channel


    【解决方案1】:

    在我开始解释发生了什么之前,让我先给你看一下 dart 中的一些东西

    Uint8List li = Uint8List.fromList([-2, 100, 32]);
    li.cast<int>();
    print(li); //prints [254, 100, 32]
    

    那么为什么 -2 变为正 254 呢?简短的解释是 dart 期望 Uint8List 中的字节是无符号值 所以它打印正值 254 但它们仍然只是字节,

    相反,在 java 中默认是 Signed bytes,它不关心如何打印字节,因为它们仍然是字节,所以我可以很高兴地告诉你,你的代码没有问题, 实际问题您试图通过打印字节列表来查看字节值, 另一个来源:https://stackoverflow.com/a/9609437/11252816 , https://stackoverflow.com/a/9609516/11252816

    【讨论】:

      猜你喜欢
      • 2022-10-12
      • 1970-01-01
      • 2020-03-13
      • 2015-11-04
      • 2014-08-11
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多