2011-10-23 46 views
6

Tôi có một lớp mở rộng BroadcastReceiver được gọi khi có kết quả quét Wifi mới (người nhận được đăng ký trong tệp kê khai với Scan_Results phát dưới dạng bộ lọc ý định).Thông báo hiển thị Android từ BroadcastReceiver

Từ lớp học này, tôi muốn có thể hiển thị thông báo cho người dùng. Hiện tại, tôi chuyển ngữ cảnh được nhận dưới dạng tham số trong phương thức onReceive của lớp mục đích phát sóng của tôi tới phương thức "hiển thị thông báo" của một lớp khác.

Khi nó được cho là dòng:

myNotificationManager.notify(notificationId, notification); 

nó không thành công với ngoại lệ sau:

java.lang.IllegalArgumentException: contentView required: pkg=com.mumfordmedia.trackify id=2131034122 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0) 

Bất cứ ý tưởng tại sao điều này đang xảy ra? Tất cả những gì tôi có thể nghĩ đến là vì bối cảnh mà tôi nhận được từ tham số onReceive không phải là ... vì thiếu một cụm từ tốt hơn, "đúng cho công việc" ...

Bất kỳ ý tưởng nào? Cảm ơn, CPC

+1

Có lẽ đây http://stackoverflow.com/questions/2826786/pendingintents-in-notifications sẽ giúp. Dù sao, hãy cho chúng tôi biết thêm mã để chúng tôi có thể trợ giúp. – Jong

+2

Vui lòng cho chúng tôi biết thêm một số mã của bạn để chúng tôi có thể hiểu rõ hơn về những gì đang diễn ra. –

+0

Nhân tiện, Chào mừng bạn đến với Stackoverflow! Nếu bạn trả lời là hữu ích, vui lòng bỏ phiếu. Nếu câu trả lời thành công, bạn hãy nhấp vào dấu kiểm màu xanh bên cạnh để chấp nhận câu trả lời. –

Trả lời

0

Từ những gì tôi có thể biết, khi bạn đang tạo thông báo cho bạn để chuyển tới Trình quản lý thông báo, bạn sẽ không cho phép chế độ xem nội dung hiển thị. Xem lại dòng nơi bạn thực sự tạo thông báo để xem liệu bạn có đang thực sự đưa ra thông báo cho chế độ xem để hiển thị hay không.

+0

Tôi đã sao chép và dán tập lệnh thông báo từ nơi khác trong ứng dụng mà nó hoạt động.Không có sẵn chế độ xem nội dung vì nó đang được kích hoạt từ một lớp mở rộng BroadcastReceiver không có bố cục. Tại sao cần một chế độ xem nội dung? Tôi sẽ xem lại tài liệu trong vài giờ ... cảm ơn câu trả lời btw –

2

Không chắc chắn chính xác lý do tại sao nó wasnt làm việc trước nhưng đây là đoạn code tôi đã nhận nó làm việc với:

Khai báo bên ngoài sau đây của phương pháp nào:

int YOURAPP_NOTIFICATION_ID = 1234567890; 
NotificationManager mNotificationManager; 

Sau đó, trong phương pháp onReceive gọi sau :

mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
showNotification(context, R.drawable.icon, "short", false); 

sau đó khai báo phương pháp sau đây:

private void showNotification(Context context, int statusBarIconID, String string, boolean showIconOnly) { 
     // This is who should be launched if the user selects our notification. 
     Intent contentIntent = new Intent(); 

     // choose the ticker text 
     String tickerText = "ticket text"; 

     Notification n = new Notification(R.drawable.icon, "ticker text", System.currentTimeMillis()); 

     PendingIntent appIntent = PendingIntent.getActivity(context, 0, contentIntent, 0); 

     n.setLatestEventInfo(context, "1", "2", appIntent); 

     mNotificationManager.notify(YOURAPP_NOTIFICATION_ID, n); 
    } 
+0

mã này chạy cho tôi. thanks :) – IRvanFauziE

2

Bạn phải gọi đến Notification.setLatestEventInfo().

1

Sử dụng mã này cùng với thông báo của bạn

Intent intent = new Intent(this, MusicDroid.class); 
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0); 
notification.setLatestEventInfo(this, "This is the title", 
    "This is the text", activity); 
notification.number += 1; 

nm.notify(NOTIFY_ID, notification); 
14

contentView là quan điểm được yêu cầu khi thông báo được nhấp. Mã bên dưới hoạt động tốt và setLatestEventInfo() là phương thức bắt buộc.

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_launcher, 
      "Hello from service", System.currentTimeMillis()); 
    Intent intent = new Intent(this, MainActivity.class); 
    notification.setLatestEventInfo(this, "contentTitle", "contentText", 
      PendingIntent.getActivity(this, 1, intent, 0)); 
    manager.notify(111, notification); 
+1

+1: sử dụng setLatestEventInfo() làm cho lỗi biến mất. Đó là một chút khó chịu làm thế nào nhiều dòng mã nó cần để có được một thông báo đơn giản như vậy hiển thị ... – ArtOfWarfare

0

Đối với những người đang sử dụng NotificationCompat, đoạn code sau sẽ làm việc:

NotificationCompat.Builder n = new NotificationCompat.Builder(this) 
    .setSmallIcon(R.drawable.icon).setContentText("Notify Title").setContentText("Sample Text"); 
    NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    Intent i = new Intent(this,MainActivity.class); 
    PendingIntent ac = PendingIntent.getActivity(this, 0, i, 0); 
    n.setContentIntent(ac); 
    nm.notify(12222, n.build()); 
Các vấn đề liên quan