2

我用C#开发了一个基于 PC 的 API来与嵌入式电子设备进行通信。此 API 读取 PC COM 端口、解码数据包、构建数据包并引发事件。现在我需要在 Android 手机中开发相同的 API。由于 C# 和 Java 事件之间存在差异,我很困惑如何在 Java 中实现相同的目标。

以下 C# 代码引发事件:

public class MARGserial
{

    dataObject = BT_DeconstructPacket(encodedPacket);
    if (dataObject != null) // if packet successfully deconstructed
    {
        OnMARGdataReceived(dataObject);

        if (dataObject is RawMARGdata)
        {
           OnRawMARGdataReceived((RawMARGdata)dataObject);

           PacketsReadCounter.RawMARGdataPackets++; 
        }
    }
    public delegate void onRawMARGdataReceived(object sender, RawMARGdata e);
    public event onRawMARGdataReceived RawMARGdataReceived;
    protected virtual void OnRawMARGdataReceived(RawMARGdata e)
    { 
       if (RawMARGdataReceived != null)
          RawMARGdataReceived(this, e);
    }

}/*End of MARGserial class */

以下代码用于OnRawMARGdataReceived在 Windows 控制台应用程序中订阅 Event。

public static MARG_api.MARGserial MARGserial = new MARG_api.MARGserial("COM44");
MARGserial.RawMARGdataReceived += new MARG_api.MARGserial.onRawMARGdataReceived(MARGserial_RawMARGdataReceived);

static void MARGserial_RawMARGdataReceived(object sender, MARG_api.RawMARGdata e)
{
    Console.WriteLine("Data :  " + e.Accelerometer[0].ToString() + "  "+e.Accelerometer[1].ToString()+ "  "+e.Accelerometer[2].ToString());
}

对于 Android Java 应用程序,应用程序本身的 Main Activity 类必须订阅在另一个类线程内触发的事件(该线程读取蓝牙缓冲区并构造数据包)

4

4 回答 4

0

如果您没有使用“Swing”之类的 GUI 工具包,那么在 Java 中,侦听器模式对于此类任务非常常见。

也就是说,您有一个在主机上注册自己的侦听器,而主机又拥有一个侦听器列表。如果与侦听器对应的事件发生,则侦听器会收到通知。

它与观察者模式非常相似。

也许这个SO 问题很有帮助。

于 2012-09-26T09:43:13.467 回答
0

您可以在这里使用设计模式,尤其是 Observer:

在 Observer 中,您有一个名为 IObserver 的接口和一个名为 update() 的方法,您可以让所有感兴趣的对象实现该方法。然后主对象存储一组 s ,当发生某些事情时,它会在该集合中的每个对象上调用 .update() (本质上是回调)。这在 MVC 架构中也很常见,如果您想在 GUI 中采用这种方式,当模型状态发生变化并且需要更新视图时。

您还可以使用命令设计模式实现委托风格的一阶函数,这在 Java 中非常有用,因为没有对这个概念的本机支持。

我不确定以上内容是否对您的特定环境有所帮助,但设计模式通常是解决各种问题的好方法。

于 2012-09-26T09:48:20.983 回答
0

我成功开发了可以使用Google 提供的BluetoothChat示例连接到我的蓝牙设备的 android 应用程序。设备的蓝牙模块具有来自RovingNetworks (RN-41) 的 SPP(串行端口配置文件)

于 2013-03-21T03:32:44.403 回答
-1

请检查 -

http://v-lad.org/projects/gnu.io.android/

于 2012-09-26T09:54:52.060 回答