3

當我目前遇到了以下問題活動不啓動:火力地堡通知:狀態欄通知被點擊

  1. 我實現了定製FirebaseMessagingService和方法onMessageReceived()被覆蓋。此外,當應用程序在後臺,我從getExtras()獲取包。
  2. 我需要通知內容才能在本地保存在數據庫中。

會發生什麼:從火力地堡控制檯

  1. 發送3通知時,應用程序在創建
  2. 3所狀態欄通知的背景。
  3. 點擊其中一個 - >啓動器活動被打開,通知中的內容被保存。
  4. 依次點擊狀態欄的通知(當應用程序仍然在前臺) - >什麼也沒有發生......

能否請你幫忙嗎?

發射活動代碼:

if (getIntent().getExtras() != null) { 
     Bundle extras = getIntent().getExtras(); 
     String title = (String) extras.get(Constants.TOPIC_KEY_TITLE); 
     String imageUrl = (String) extras.get(Constants.TOPIC_KEY_IMAGE_URL); 
     String url = (String) extras.get(Constants.TOPIC_KEY_URL); 
     String description = (String) extras.get(Constants.TOPIC_KEY_DESCRIPTION); 
     Long sentTime = (Long) extras.get(Constants.TOPIC_KEY_SENT_TIME); 

     if (Util.isStringsNotNull(description)) { 
      News news = new News(); 
      news.setTitle(title); 
      news.setMessage(description); 
      news.setDescription(description); 
      news.setImageUrl(imageUrl); 
      news.setUrl(url); 
      news.setDate(sentTime); 
      news.save(); 

      EventBus.getDefault().post(new OnNewsUpdatedEvent(news)); 
      AppPreferences.incrementUnseenNewsCount(this); 
     } 
    } 

    String action = getIntent().getAction(); 

    if (Util.isStringNotNull(action) && action.equals(ACTION_SEARCH)) { 
     startActivity(MainActivity.getIntentActionSearch(this)); 
    } else { 
     startActivity(MainActivity.getIntent(this)); 
    } 

定製FirebaseMessagingService代碼:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    LogUtil.log(BASIC_TAG, "onMessageReceived called!"); 

    String description = null; 
    String imageUrl = null; 
    String url = null; 
    String title = null; 

    Map<String, String> dataMap = remoteMessage.getData(); 
    if (dataMap != null && !dataMap.isEmpty()) { 
     description = dataMap.get(Constants.TOPIC_KEY_DESCRIPTION); 
     imageUrl = dataMap.get(Constants.TOPIC_KEY_IMAGE_URL); 
     url = dataMap.get(Constants.TOPIC_KEY_URL); 
     title = dataMap.get(Constants.TOPIC_KEY_TITLE); 
    } 

    if (Util.isStringNotNull(description)) { 
     RemoteMessage.Notification notification = remoteMessage.getNotification(); 

     News news = new News(); 
     news.setDate(remoteMessage.getSentTime()); 
     news.setTitle(Util.isStringNotNull(title) ? title : notification.getTitle()); 
     news.setMessage(notification.getBody()); 
     news.setDescription(description); 
     news.setImageUrl(imageUrl); 
     news.setUrl(url); 
     news.save(); 

     EventBus.getDefault().post(new OnNewsUpdatedEvent(news)); 
     AppPreferences.incrementUnseenNewsCount(this); 
    } 
} 
+0

請發佈您的代碼 – Ameer

+0

@Ameer,已經完成! –

回答

0

我會假設你在你活動的onCreate()方法的發射活動代碼。一旦活動被創建並且你點擊另一個通知,onCreate()將不會被再次調用。

要更新用戶已經可見的活動,您需要做的是覆蓋顯示數據的活動的onNewIntent(Intent intent)方法,並在其中更新您的視圖。

+0

我試過你的解決方案。不幸的是,onNewIntent(Intent intent)方法未被調用(在MainActivity中,它是當前可見的活動)並且什麼也沒有發生。我是否必須在AndroidManifest.xml中爲此活動設置特殊標誌? –

+0

我沒有從Firebase控制檯發送消息的經驗(我們仍在使用GCM),但如果您可以通過單擊它們打開應用程序,afaik通知始終將PendingIntent作爲ContentIntent。如果應用程序已經處於前臺,這將以啓動模式singleTop(通過manifest或IntentFlag)啓動時以onNewIntent結尾,否則會在當前任務堆棧上啓動一個新的Activity。你能提供更多關於你的啓動模式的信息嗎? – Sander

+0

我沒有在AndroidManifest.xml文件中設置任何特定的啓動模式... –