0

大多數熟悉Notification和PendingIntent API的人都知道setLatestEventInfo現在已被棄用。正在進行的通知和singleTop標誌

因此,我正試圖取代我現有的代碼(取決於方法已過時):

Context context = getApplicationContext(); 
    Intent activityIntent = new Intent(context, Activity.class); 
    activityIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    Notification notification = new Notification(R.drawable.icon, getString(R.string.notify),System.currentTimeMillis()); 
    PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent, 0); 
    notification.setLatestEventInfo(context, getString(R.string.notify), getString(R.string.notifysummary), startIntent); 
    this.startForeground(1234,notification); 

正如你可能已經猜到,我從在後臺運行的服務中調用此。服務啓動時,它會提示通知。這是一個持續的,持續的通知,如果活動存在,則會將活動「Activity.class」放在前面,並創建一個活動的新實例以防其同時被殺死。工作正常,沒有任何問題。

現在想遷移到新的API級別,我想用下面的例子NotificationBuilder更換上面的代碼:

 Context context = getApplicationContext(); 
     Intent activityIntent = new Intent(context, Activity.class);    
     activityIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent, Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     Notification notification = new Notification.Builder(context).setSmallIcon(R.drawable.ic_launcher).setContentText("App running").setContentTitle("My app").setOngoing(true).setAutoCancel(false).setContentIntent(startIntent).build(); 
     this.startForeground(1234,notification); 

但點擊通知不會有任何效果。不過,我已經嘗試過「Intent.FLAG_ACTIVITY_NEW_TASK」,因爲文檔說我應該。這會創建一項新任務,即使該活動已處於最佳狀態,與文檔所述內容相對應:PendingIntentFLAG_ACTIVITY_NEW_TASK

有沒有人遇到同樣的問題?如何構建一個持久化通知,在點擊時不會被解散,並且如果堆棧中的某處將活動置於頂部,否則會創建一個新的實例?

感謝您的幫助。

回答

2

這是不正確的:

PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent, Intent.FLAG_ACTIVITY_SINGLE_TOP); 

你傳遞一個Intent標誌getActivity()。對於getActivity()第四個參數需要PendingIntent標誌,如:

  • PendingIntent.FLAG_CANCEL_CURRENT
  • PendingIntent.FLAG_NO_CREATE
  • PendingIntent.FLAG_ONE_SHOT
  • PendingIntent.FLAG_UPDATE_CURRENT

你傳入Intent.FLAG_ACTIVITY_SINGLE_TOP爲第四個參數。該constance實際上具有值0x20000000。巧合的是,PendingIntent.NO_CREATE也有值0x20000000,所以你在做什麼是一樣的:

PendingIntent startIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.NO_CREATE); 

那是你的問題。

只需將第四個參數設置爲getActivity()0,就像在原始代碼中一樣。

+0

你是絕對正確的。那是(在其他一些缺陷之下)原因。現在修復它。非常感謝。 – mad