2012-05-23 16 views
9

Tôi có một số mã tạo ra một số thông báo, nó thực sự cơ bản.Android 4: không thể loại bỏ thông báo bằng cách vuốt

int icon = R.drawable.notification; 
CharSequence tickerText = "Text"; 
long when = System.currentTimeMillis(); 
Notification notification = new Notification(icon, tickerText, when); 

Context context = getApplicationContext(); 
CharSequence contentTitle = "Text"; 
CharSequence contentText = "Text"; 
Intent notificationIntent = new Intent(this, RequestActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
notification.flags |= Notification.DEFAULT_SOUND; 
notification.flags |= Notification.DEFAULT_VIBRATE; 
notification.flags |= Notification.DEFAULT_LIGHTS; 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 

mNotificationManager.notify(notificationID, notification); 

Tất cả đều hoạt động tốt trong 2.1. Trong 4.0, tất cả đều hoạt động tốt ngoại trừ hành động vuốt-to-loại bỏ không hoạt động. Thông báo chuyển sang một bên, sau đó nhét và trả lại. Bất kỳ ý tưởng nào? Cảm ơn.

+0

cố gắng để loại bỏ FLAG_AUTO_CANCEL –

+0

@Copa đã cố gắng – James

+0

mh ... cố gắng gán cờ đầu tiên ntofication.flags và không Bitwise hoặc lá cờ đầu tiên. Thay đổi notification.flags | = DEFAULT_SOUND thành notification.flags = Notification.DEFAULT_SOUND; Có lẽ điều này sẽ giúp –

Trả lời

12

Bạn không thể vuốt bỏ thông báo của mình vì thông báo nằm trong "ONGOING" -State.

Đầu tiên các giải pháp:

Thay thế thiết lập cờ với đoạn mã sau:

notification.defaults |= Notification.DEFAULT_SOUND; 
notification.defaults |= Notification.DEFAULT_VIBRATE; 
notification.defaults |= Notification.DEFAULT_LIGHTS; 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 

Defaults là dành cho các giá trị mặc định phần, cờ cho cờ-phần.

Và bây giờ lý do tại sao nó đang diễn ra?

Như bạn có thể đã biết cờ (và mặc định) cho thông báo được đặt bởi bitwise operation. Có nghĩa là mỗi lá cờ có một giá trị không đổi là một sức mạnh của 2. Thêm chúng kết quả trong một số duy nhất cho một tập hợp các lá cờ mà làm cho nó thật nhanh để tính toán những lá cờ thực sự được thiết lập.

Notification.DEFAULT_VIBRATENotification.FLAG_ONGOING_EVENT có cùng giá trị contant là .

+0

Đây chính xác là những gì tôi cần biết. Cảm ơn! – joshplusa

+0

Bắt đầu shwoing với setOngoing (false) và notification.flags | = Notification.FLAG_AUTO_CANCEL. –

0

Chỉ cần chèn dòng này khi bạn thực hiện thông báo ...

// Will show lights and make the notification disappear when the presses it 
notification.flags == Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS; 
4

Bạn nên sử dụng setOngoing (boolean ongoing)

Đặt cho dù đây là một "liên tục" thông báo. Thông báo đang diễn ra không thể bị người dùng loại bỏ, do đó, ứng dụng hoặc dịch vụ của bạn phải đảm bảo việc hủy chúng. Chúng thường được sử dụng để chỉ ra tác vụ nền mà người dùng đang tích cực tham gia (ví dụ: đang phát nhạc) hoặc đang chờ xử lý theo cách nào đó và do đó chiếm dụng thiết bị (ví dụ: tải xuống tệp, thao tác đồng bộ hóa, kết nối mạng đang hoạt động) .

Bạn có thể sử dụng

.setOngoing(false); 
Các vấn đề liên quan