2013-08-20 32 views
7

Tôi đang thêm hai nút tác vụ vào thông báo của mình, khi tôi nhấp vào một trong hai nút đó, họ thực hiện hành động mong muốn nhưng thông báo vẫn còn trong ngăn thông báo của tôi. Tôi biết có thể xóa thông báo khỏi ngăn thông báo khi nút thao tác được nhấp vào vì đó là cách Gmail hoạt động. Nếu tôi nhấp vào thông báo chính, ứng dụng sẽ mở ứng dụng và xóa thông báo khỏi ngăn thông báo.Xóa thông báo khi addAction được gọi?

Dưới đây là một đoạn mã của tôi:

Intent completeIntent = new Intent(getApplicationContext(), MarkComplete.class); 
     completeIntent.putExtra("rowid", inrowid); 
     completeIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

PendingIntent markCompleteIntent = PendingIntent.getActivity(getApplicationContext(), inrow, completeIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

builder.setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("Title") 
       .setContentText("text") 
       .setContentIntent(notificationReleaseIntent) 
       .setPriority(Notification.PRIORITY_HIGH) 
       .setAutoCancel(true) 
       .addAction(R.drawable.complete, "Mark Complete", markCompleteIntent); 

Edit - Như zionpi chỉ ra tôi cần phải gọi notification.cancel(); để xóa thông báo khi nút addAction đã được nhấp. Tôi chỉ cần thêm phương thức này vào các lớp của tôi, nơi PendingIntent đang trỏ.

public static void CancelNotification(Context ctx, int notifyId) { 
    String s = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNM = (NotificationManager) ctx.getSystemService(s); 
    mNM.cancel(notifyId); 
} 
+0

Mã chưa hoàn thành. Thông báo vẫn còn đó? – Nizam

+0

IMO Gmail sử dụng dịch vụ để giữ tham chiếu đến đối tượng thông báo và do đó, nó có thể xóa thông báo khi phù hợp với điều kiện nhất định. –

Trả lời

4

Vì vậy, bạn muốn xóa thông báo của mình, sơ bộ là có id thông báo.
sau đó gọi phương thức tương tự như dưới đây để loại bỏ nó.

public static void CancelNotification(Context ctx, int notifyId) { 
     String s = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNM = (NotificationManager) ctx.getSystemService(s); 
     mNM.cancel(notifyId); 
    } 

Bạn có thể tham khảo thisthis bài đăng thay thế.

+0

zionpi, Cảm ơn bạn đã làm việc hoàn hảo! – marty331

+0

Giả sử addAction của tôi sẽ mở MainActivity, sau đó nếu tôi gọi nó là 'mNM.cancel (notifyId);' ở đầu MainActivity, nó sẽ luôn hủy thông báo khi tôi mở MainActivity ngay cả khi tôi không click hoặc kiểm tra thông báo . Vì vậy, khi tôi nên gọi điều này để nó sẽ chỉ được gọi sau khi nhấp vào nút addAction. @zionpi – Sp4Rx

+0

Thông báo vẫn hiển thị cho đến khi một trong những điều sau xảy ra, hãy tham khảo [this] (https://developer.android.com/training/notify-user/managing.html#Removing). @ Sp4Rx – zionpi