0

我的应用程序有一个聊天屏幕来发送和接收消息。每当收到消息时,都会出现推送通知并显示最新收到的消息。这一切都很好。

但是当我收到推送通知时,我希望聊天屏幕能够自行刷新。我想这需要知道聊天屏幕当前是否可见。我怎样才能从我的onReceive()方法做到这一点BroadcastReceiver

这是一个小伪代码(在我的BroadcastReceiver子类中):

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

}

我想知道如何获取 currentVisibleActvity 并使其call getMessages()成为 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正在显示并使用 aCursorAdapter来读取ContentProvider它,它将自动刷新。

在这种情况下,发送聊天消息也会在其中存储一行ContentProvider- 就像收到的消息一样自动更新 UI。

于 2012-04-06T20:10:26.193 回答