組み込み電子デバイスと通信するために、 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 アプリケーションの場合、アプリケーション自体のメイン アクティビティ クラスは、別のクラス スレッド内で発生するイベントをサブスクライブする必要があります (このスレッドは Bluetooth バッファを読み取り、パケットを構築します)。