簡體   English   中英

Android | 在收到推送通知時不斷更新UI

[英]Android | Continuously update UI on receiving a push notification

我想在收到推送通知后立即更新UI,類似地,Facebook如何更新其通知計數。

我所取得的成就:

  1. 我收到通知。
  2. 我將值保存在共享首選項中。 這會不斷更新,一收到新通知,我的共享首選項中的值就會更新。 它在BroadcastReceiver的onReceive方法上更新。
  3. 我第一次打開活動(UI)時會獲得該值並正確顯示。

問題:

我處於活動(UI)中,並且通知不斷出現,因此更改了共享首選項中的值。 現在,直到我移至另一個活動並返回之前,我的UI才會更新。 UI是在onCreate方法中創建的。

問題:如何在通知到達后立即連續更新UI,而又不離開或更改當前活動(UI)。

謝謝

如果您在共享首選項中存儲值,則建議不要在活動中使用OnSharedPreferenceChangeListener http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

當您存儲數據的方法存在疑問時,您可以注冊 OnSharedPreferenceChangeListener 更改首選項后,這將收到回調。 請注意,它必須是一個實例變量,不是內部匿名類。

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

您可以按以下方式進行注冊(假設您只是使用默認的共享prefs文件):

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

您可以將您的活動注冊為與當前班級相同的廣播,使用sendOrderedBroadcast可以指定接收者獲取廣播消息的順序。 在這里,您可以將“活動”放在比其他班級更高的優先級上,

A)更新您的共享首選項B)更新您的文本視圖

然后調用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);

記住這一點,您必須在onResume方法中注冊BroadcastReceiver ,而在onPause方法中取消注冊。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM