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

4

4 に答える 4

0

「Swing」のようなGUIツールキットを使用していない場合、Javaではリスナーパターンがこの種のタスクで非常に一般的です。

つまり、ホストに自分自身を登録するリスナーがあり、ホストはリスナーのリストを保持します。リスナーに対応するイベントが発生すると、リスナーに通知が届きます。

これは、オブザーバーパターンと非常によく似ています。

たぶん、このSOの質問は役に立ちます。

于 2012-09-26T09:43:13.467 に答える
0

ここでデザイン パターン、特に Observer を使用できます。

Observer には、関心のあるすべてのオブジェクトを実装させる update() と呼ばれるメソッドを持つ IObserver と呼ばれるインターフェイスがあります。次に、マスター オブジェクトは のセットを格納し、何かが発生すると、そのコレクション内のすべてのオブジェクトで .update() を呼び出します (本質的にはコールバック)。これは、モデルの状態が変化し、ビューを更新する必要がある場合に、GUI でそのようにしたい場合、MVC アーキテクチャでも一般的です。

コマンド設計パターンを使用してデリゲート スタイルの一次関数を実現することもできます。これは、この概念がネイティブでサポートされていない Java で非常に役立ちます。

上記が特定のコンテキストで役立つかどうかはわかりませんが、通常、デザイン パターンはあらゆる種類の問題を解決するための優れた方法です。

于 2012-09-26T09:48:20.983 に答える
0

Google が提供するBluetoothChatサンプルを使用して、Bluetooth デバイスに接続できる Android アプリケーションの開発に成功しました。デバイスの Bluetooth モジュールには、 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 に答える