1

約8つのアクティビティを持つアプリケーションと、組み込みのBluetoothチップとの間でデータを接続/受信するために使用されるクラスを開発しています。私が始めたとき、Bluetoothオブジェクトは私の最初のアクティビティで初期化されました。そこではBluetoothオブジェクトからメッセージを受信するハンドラーがありました。

しばらくインターネットを調べた後、私のクラスをApplicationサブクラスに変えるのが最善のアイデアのようです。ただし、これを行うと、MainMenuでオブジェクトを初期化する必要がなくなり、ハンドラーが使用したオブジェクトを渡すことができなくなります。

Bluetoothアプリケーションが状態を変更したり、データを受信したりするたびに、現在のアクティビティがハンドラーにアクセスできるように、ハンドラーの必要性を排除する方法を知っている人はいますか?

このアプローチでの私の主な問題は、Bluetoothアプリケーションがいつメッセージを送信するかをアクティビティが認識せず、アプリケーションが待機してリッスンし、発生したときにアクティビティに通知することです。

また

ハンドラーをMainMenuに書き込み、すべての異なるアクティビティのメッセージを処理してから、ハンドラーをアクティビティからアクティビティに渡すのは悪い習慣ですか?

4

2 に答える 2

5

あなたの質問から最終的な目的が少し不明確であるため、次のことを達成しようとしていると仮定します(申し訳ありません!):

  1. アプリケーションにはいくつかのアクティビティがありますが、Bluetooth デバイスからデータを受け取るアクティビティは 1 つだけです。
  2. アプリケーション内の他のアクティビティは、Bluetooth デバイスからのデータを必要としますが、Bluetooth デバイスから直接受信していません。現在、上記の 1 つのアクティビティを介してデータを提供しています。
  3. これを達成するためにハンドラを使用したくありません。

上記の仮定が正しければ、正しい方向に進んでいますが、おそらく Handler を使用したくないでしょう。

Bluetooth デバイスとのすべての対話を 1 つのアクティビティで処理するという点で、あなたはまったく正しいです。これにより、物事が単純化され、Bluetooth デバイスを処理するためのより優れた、よりクリーンな方法が提供されます。ただし、この 1 つのアクティビティから他のすべてのアクティビティにデータを取得する必要があり、これを実現するには、おそらくBroadcasts、BroadcastReceivers、および Intents を使用する必要があります。概要はこちらをご覧ください。

ただし、可能な場合はLocalBroadcastManagerの使用を検討することをお勧めします。これにより、ブロードキャストが独自のアプリのスペース内に保持されます。ブロードキャストはグローバルであるため、セキュリティ上の理由から独自のアプリの外部にデータを渡す必要がない場合は避ける必要があります。

最後に、他のアクティビティにフラグメントを使用することを検討しましたか? ブロードキャストのもう 1 つの欠点は、ブロードキャストに関連する余分なオーバーヘッドがあることです。アプリ内にデータを保持している場合は、各フラグメントによって実装されるインターフェイスを作成できます。メイン アクティビティは、現在選択されているフラグメントでそのインターフェイスを呼び出すだけです。

于 2012-06-22T13:08:32.537 に答える
1

BroadcastReceiver クラスを使用して、ブロードキャスト メッセージをアクティビティに送信できます。ここを参照してくださいhttp://developer.android.com/reference/android/content/BroadcastReceiver.html

必要なデータをアプリケーション クラスに取得したら、それを必要なアクティビティに送信できます。アクティビティがそのブロードキャスト メッセージを受信するように登録されていることを確認してください。

于 2012-06-22T13:00:20.880 に答える