我已經開發了一個基於PC的API,在C#與嵌入式電子設備進行通信。該API讀取PC COM端口,解碼數據包,構造數據包並引發事件。現在我需要在Android手機中開發相同的API。由於C#和Java事件之間存在差異,我很困惑如何在Java中實現相同的功能。C#中的等效事件
下面的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 */
下面的代碼是在Windows控制檯應用程序訂閱事件OnRawMARGdataReceived
。
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應用程序,主要活動類本身認購這是另一類線程內觸發的事件(此線程讀取藍牙緩衝&構造的數據包)
事件不是Java中的語言功能。這個答案很好地總結了它:http://stackoverflow.com/a/4763441/14357 – spender