1

シンプルなメッセージアプリがあります。サーバーからデータ (メッセージ) を受信するために Websockets 経由で STOMP を使用します。

すべての websockets をサービスに移動して、アクティビティにバインドしてメッセージを送信できるようにしたいと考えています。

Binder を使用すると、Activity で Service メソッドを実行できるため、メッセージの送信は問題になりません。問題は、メッセージを受信して​​アクティビティのビューに配置することです。

そのように、ローカルデータベースでそれを行いたいです:

  1. サービスは STOMP からメッセージを受け取ります
  2. サービスはそのメッセージをローカル データベースに配置します
  3. アクティビティは、データベースに新しいメッセージがあることを何らかの方法で理解し、それを ListView に入れます (CursorAdapter を使用しますか?)。

どうすればそれを達成できますか?たぶん、Activity と Service で同じデータベース ContentResolver を使用するようなものが必要ですか?

4

1 に答える 1

0

ブロードキャスト メッセージ websocket からメッセージを受信したとき。したがって、サービスからこのメソッドを呼び出します。

private void broadcastNotification(Context context){
    Intent intent = new Intent("NOTIFICATION");
    intent.putExtra("MESSAGE", "your_message");
    context.sendBroadcast(intent);        
}

アクティビティに Broadcast Receiver を登録します。

@Override
protected void onResume() {
    super.onResume();
    mContext.registerReceiver(mMessageReceiver, new   IntentFilter("NOTIFICATION"));
}

@Override
protected void onPause() {
    stopService();
    mContext.unregisterReceiver(mMessageReceiver);
    super.onPause();
}

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //Update the Activity
    }
}

したがって、websocket からメッセージを受信するたびに、それをデータベースに保存し、メッセージをブロードキャストしてアクティビティでリッスンします。アクティビティ呼び出しの OnReceive メソッドがアクティビティ更新タスクを実行するとき。

于 2015-04-14T15:41:11.050 に答える