2013-02-22 70 views
18

我試圖顯示用戶點擊它時必須刪除的通知。 我使用NotificationCompat類來構建我的通知,我在builder上撥打setAutoCancel(true)。這是一段代碼:通知setAutoCancel(true)不起作用

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.ic_launcher) 
     .setContentTitle("title") 
     .setAutoCancel(true) 
     .setContentText("content"); 
    NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0, mBuilder.build()); 

該通知已正確添加,但是當我點擊它時什麼也沒有發生!我錯在哪裏?

+0

通知只停留在那裏?當你刷卡解僱它會發生什麼?你運行什麼設備和API版本? – 2013-02-22 21:46:16

+0

我在Galaxy Nexsus API 4.2.2上運行。如果我滑過它,通知消失,但如果我只是點擊它,沒有任何反應。 – TheModularMind 2013-02-22 22:41:48

回答

41

使用setContentIntent應該解決您的問題:

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 

在您的例子:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentTitle("title") 
     .setAutoCancel(true) 
     .setContentText("content") 
     .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(0, mBuilder.build()); 

通常你可能希望將用戶引導到相關的內容,因此可能會取代「新意圖() '與別的東西。

我上傳了demo github。

+2

爲什麼這個答案被降低了?它問題的問題是什麼!謝謝,它爲我工作。 – 2013-07-30 08:18:10

+0

謝謝。儘管用戶仍然可以通過刷卡來清除通知。 – gatopeich 2013-11-08 18:45:25

+0

我發現這個方法可行,但它可能會導致一個特別的意外結果:我也從通知中單獨打開contentIntent。這可以自動取消通知的聲音(在moto g3上,Google Pixel沒有)。 – jobbert 2017-02-20 12:09:43

17

我知道一個答案已經被接受,但我有一個不同的解決方案相同的問題,所以我會在這裏分享。

對我來說,我使用的是同一個NotificationCompat.Builder對象來創建一個叫做setOngoing(true)的通知。這是上傳進度通知,不應在工作時刪除。

無論如何,在任務完成後,我打電話給setAutoCancel(true),但通知仍未消除。我所要做的也是撥打setOngoing(false)

現在看起來很明顯,但它可能在未來的某個時間爲別人節省。

+0

如果你已經找到解決問題的方法,請寫下正確的方式將其整理出來 – 2015-07-31 14:18:56

+0

謝謝,我遇到同樣的問題,你救了我的一天! – SalutonMondo 2015-11-05 13:42:35

+0

thnks budd hhhhhjhjh :) – Shikhar 2016-03-30 05:58:17