Smobiler上海石磨_.NET移动开发平台

标题: 4.9 版本 蓝牙插件的WriteData事件中的回调不起作用了 [打印本页]

作者: bigjimmy8257    时间: 2019-9-9 16:33
标题: 4.9 版本 蓝牙插件的WriteData事件中的回调不起作用了
Smobiler的专家,

我今天在4.9的内测版上使用蓝牙的WriteData事件时,发现它的回调事件无法被触发。以下面的代码为例:

                bluetooth1.WriteData("Hello", (abj, args) =>
                {
                    label1.Text = "data sent";
                    if (args.isError == true)
                        Toast(args.error);
                });


执行上面代码,接收方可以收到数据包“Hello”, 但是在发送方, label1的内容并未改变,在该语句上做断点,断点并不能被触发。

请检查。

谢谢
大杰米。

作者: peter.pan    时间: 2019-9-9 17:40
您好:
初步测试,4.9版本确实没有触发回调,已提交技术部
谢谢

作者: bigjimmy8257    时间: 2019-9-10 12:31
peter.pan 发表于 2019-9-9 17:40
您好:
初步测试,4.9版本确实没有触发回调,已提交技术部
谢谢

Peter,

谢谢您的测试和回复。

大杰米。
作者: peter.pan    时间: 2019-9-10 15:49
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判断发送失败。
谢谢
作者: bigjimmy8257    时间: 2019-9-11 15:33
本帖最后由 bigjimmy8257 于 2019-9-11 15:35 编辑
peter.pan 发表于 2019-9-10 15:49
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判 ...

Peter,

谢谢技术部的回复,但是基于这个逻辑,我如何实现在发送成功后调用相应的代码呢?

如果我把成功后要执行的代码放在 WriteData() 后面,那么WriteDate()就不会被执行。原因应该是之前提到,异步执行是要求所有代码都执行完成后才会执行。这样一来根本就无从判断是否 WriteData()是否成功。
例如:
     flag_success = true;
     bluetooth1.WriteData("Something", (obj, args) =>
      {
           flag_success = false;
      });

      if(flag_success)   
      {
          //  成功后的代码段
      }

也许我想得不周全,能给一个如何判断发送成功的示例吗?

大杰米。

作者: bigjimmy8257    时间: 2019-9-19 15:19
peter.pan 发表于 2019-9-10 15:49
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判 ...

Peter,

技术部有进一步的反馈吗?

大杰米
作者: peter.pan    时间: 2019-9-23 10:36
bigjimmy8257 发表于 2019-9-19 15:19
Peter,

技术部有进一步的反馈吗?

您好:
WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。所以之前的WriteData方法成功并不能判断蓝牙设备真的接收到信息。设备发送了信息,但是否发送成功需要蓝牙设备的交互,若成功发送,DataReceived(接收蓝牙后发生)事件会接收到信息,可以此判断。
谢谢
作者: bigjimmy8257    时间: 2019-9-23 16:43
peter.pan 发表于 2019-9-23 10:36
您好:
WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。所以之前的Wri ...

Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息(因为我的协议中,我发送的消息本身就是应答,不需要对方对此消息再次对它进行答复)。如果没有回调,这个应该如何实现?以前我可以直接在回调部分执行我的后续操作,现在没有办法做了。如果我简单的这么写:
    bluetooth1.WriteData(Data);
    my_codes;

而我的 my_codes 中是要启动别的 窗体,在这种情况下,前面的WriteData() 是不会被执行的。

我想知道是处于什么考虑,开发团队删掉了WriteData()的回调,这个是很有用处的啊。请您反映一下? 看能不能把它加回来。

谢谢
大杰米
作者: bigjimmy8257    时间: 2019-9-23 16:45
本帖最后由 bigjimmy8257 于 2019-9-24 08:16 编辑

Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息(因为我的协议中,我发送的消息本身就是应答,不需要对方对此消息再次对它进行答复)。如果没有回调,这个应该如何实现?以前我可以直接在回调部分执行我的后续操作,现在没有办法做了。如果我简单的这么写:
    bluetooth1.WriteData(Data);
    my_codes;

而我的 my_codes 中是要启动别的 窗体,在这种情况下,前面的WriteData() 是不会被执行的。

我想知道是处于什么考虑,开发团队删掉了WriteData()的回调,这个是很有用处的啊。请您反映一下? 看能不能把它加回来。或者把WriteData()加一个非异步阻塞式的执行选项。

谢谢
大杰米
作者: peter.pan    时间: 2019-9-24 10:15
bigjimmy8257 发表于 2019-9-23 16:45
Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息 ...

您好:
已了解你的需求,提交技术部。会着手添加WriteData()发送成功回调。
但还是强调下WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。
所以添加WriteData的成功回调,并不代表蓝牙设备接收成功。
谢谢
作者: peter.pan    时间: 2019-9-24 14:46
bigjimmy8257 发表于 2019-9-23 16:45
Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息 ...

您好:
蓝牙通讯插件添加2.0.4版本:WriteData与WriteBleData添加成功回调 https://shop.smobiler.com/M401-sm_bluetooth
可重新打包新的插件版本2.0.4解决。
谢谢
作者: bigjimmy8257    时间: 2019-9-24 15:47
peter.pan 发表于 2019-9-24 14:46
您好:
蓝牙通讯插件添加2.0.4版本:WriteData与WriteBleData添加成功回调 https://shop.smobiler.com/M4 ...

Peter 您好

非常感谢您的支持。我看到了新的蓝牙通信插件,不过我之前已经买过了旧的蓝牙插件,现在必须要重新购买吗?

还有一个问题, 现在在调试的过程中,蓝牙的回调还是不正确,有Designer 或 Android Client 的新内测版本可供使用吗?

谢谢
大杰米
作者: peter.pan    时间: 2019-9-24 17:57
您好:
不需要重新购买的,只需要重新打包蓝牙通讯插件(重要:选择2.0.4版本),不需要更新Designer。
在WriteData回调中判断isError即可。
目前还没有新的Android Client 的内测版本。
谢谢

作者: bigjimmy8257    时间: 2019-10-10 12:10
peter.pan 发表于 2019-9-24 17:57
您好:
不需要重新购买的,只需要重新打包蓝牙通讯插件(重要:选择2.0.4版本),不需要更新Designer。
在W ...

Peter, 您好。

我现在在云平台上删掉旧的包,重新做Andriod打包的时候,无法在插件下拉框中找到蓝牙插件了。在商城中的订单记录中还是能够看得到之前购买的蓝牙插件的。

我应该如何来找回呢?我的云平台账号是 bigjimmy8257,

谢谢
大杰米
作者: neil    时间: 2020-9-15 14:47
您好:
     在云平台回收站彻底删除应用后,蓝牙插件可重新打包.




欢迎光临 Smobiler上海石磨_.NET移动开发平台 (https://www.smobiler.com/) Powered by Discuz! X3.2