Android |在接收推送通知时不断更新UI

时间:2014-03-06 18:44:40

标签: android user-interface push-notification

我希望在收到推送通知后立即更新我的用户界面,类似于Facebook更新其通知计数的方式。

我取得的成就:

  1. 我收到通知。
  2. 我将值保存在共享首选项中。这是不断更新的,一旦我收到新通知,我的共享首选项中的值就会更新。它在BroadcastReceiver的onReceive方法上更新。
  3. 我打开活动(UI),第一次获取值并正确显示。
  4. 问题:

    我在活动(UI)中并且通知继续进行,从而更改共享首选项中的值。现在我的UI没有更新,直到我转移到另一个活动并返回。 UI是在onCreate方法中创建的。

    问题:如何在通知到达后立即更新我的用户界面,而不必离开或更改我当前的活动(UI)。

    由于

3 个答案:

答案 0 :(得分:2)

如果您在共享偏好中存储的值超出我建议在活动中使用OnSharedPreferenceChangeListener http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

答案 1 :(得分:1)

虽然您存储数据的方法有问题,但您可以register OnSharedPreferenceChangeListener。当您的偏好更改时,这将收到回调。请注意,必须是实例变量不是内部匿名类。

private OnSharedPreferenceChangeListener preferenceChangeListener = new OnSharedPreferenceChangeListener() {
    @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        updateNotificationCount();
    }
};

您可以按如下方式注册(假设您只使用默认的共享prefs文件):

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPrefs(context);
sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener);

答案 2 :(得分:0)

您可以将您的活动注册到与您现在所在班级相同的广播,使用sendOrderedBroadcast您可以指定接收者获得广播信息的顺序。在这里,您可以将您的活动的优先级高于其他类和

A)更新您的共享偏好设置 B)更新您的textview

然后调用abortBroadcast,我会给你一个示例代码:

发送广播的课程:

Intent intent = new Intent();
intent.setAction("increase action");
intent.putExtra("new value");
context.sendOrderedBroadcast(intent,null);

您的活动

首先,你必须创建一个广播接收器

private class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //Do your work
       abortBroadcast();
  }
}

然后注册

IntentFilter filterSync = new IntentFilter();
filterSync.addAction("increase action");
filterSync.setPriority(100);
registerReceiver(myregister, filterSync);

请记住这一点,您必须在BroadcastReceiver方法中注册onResume,并使用onPause方法取消注册。

希望有所帮助