0

私のアプリには、メッセージを送受信するためのチャット画面があります。メッセージが受信されるたびに、プッシュ通知が届き、最新の受信メッセージが表示されます。これはすべてうまくいきます。

しかし、プッシュ通知を受け取ったら、チャット画面を更新したいと思います。これには、チャット画面が現在表示されているかどうかを知る必要があると思います。onReceive()私のメソッドからこれを行うにはどうすればよいBroadcastReceiverですか?

ここに小さな疑似コードがあります(私のBroadcastReceiverサブクラス内):

public void onReceive(Context context, Intent intent) 
{
    if(currentlyVisibleActivity.getClass() == chatScreenActivity.class())
    {
        ((chatScreenActivity)currentlyVisibleActivity).getMessages();
    }

}

call getMessages()currentlyVisibleActivity を取得して、chatScreenActivity の場合はそれを作成する方法を知りたいです。

4

1 に答える 1

1

次のセットアップを計画していると思いますか?

C2DM -> YourBroadcastReceiver -> somehow call #getMessages()

次のコンポーネントを用意するのはどうですか。

A BroadcastReceiver <for receiving C2DM push notifications>
An IntentService <for executing #getMessages()>
A ContentProvider <for storing the results of #getMessages()>
An Activity <for displaying the contents of ContentProvider>
  1. 基本的に、C2DM は を呼び出すレシーバーをトリガーし#startService、 をトリガーしますIntentService
  2. IntentService#getMessages()、メッセージを呼び出して に保存し ますContentProvider
  3. 内のデータに対して変更が実行されるたびに、ContentProviderがトリガーされContentResolver#notifyChange()ます。
  4. たとえば、あなたActivityが表示されていて、CursorAdapterから読み取るために a を使用している場合、ContentProvider自動的に更新されます。

チャット メッセージを送信するとContentProvider、このシナリオでは行も格納され、受信したメッセージと同じように UI が自動的に更新されます。

于 2012-04-06T20:10:26.193 に答える