2013-04-16 50 views
57

Nghiên cứu điển hình: Tôi cần một chương trình sẽ thêm thông báo tại android. Và khi ai đó nhấp vào thông báo, họ sẽ dẫn họ đến hoạt động thứ hai của tôi.Thông báo Không hiển thị

Tôi đã thiết lập mã. Thông báo sẽ hoạt động, nhưng vì lý do nào đó, thông báo không hoạt động. Notification không hiển thị. Không biết tôi đang thiếu gì.

Mã của các tập tin:

 Notification n = new Notification.Builder(this) 
       .setContentTitle("New mail from " + "[email protected]") 
       .setContentText("Subject") 
       .setContentIntent(pIntent).setAutoCancel(true) 
       .setStyle(new Notification.BigTextStyle().bigText(longText)) 
       .build(); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     // Hide the notification after its selected 

     notificationManager.notify(0, n); 
+0

hãy cố gắng thể ngắn gọn hơn khi bạn đặt câu hỏi. Bạn không đề cập đến * những gì * không hoạt động. Trong thực tế, bạn thậm chí không đề cập đến một cái gì đó không hoạt động. 'Hoạt động' không được khởi chạy? Thông báo 'không hiển thị? – slinden77

+1

@ dmmh i đã nói trong câu hỏi của tôi vấn đề của tôi là gì! Và tôi đã không tìm thấy bất cứ điều gì sai trái với câu hỏi. Câu hỏi của tôi là cụ thể về vấn đề này. Nếu bạn không phải là một chuyên gia không cần phải chọc! Và câu trả lời của tato469 vẫn ổn. –

+1

Tôi chỉ ra rằng mục đích của trang web này không dành cho bạn để khắc phục sự cố của bạn, nhưng đối với những người khác cũng có thể tìm ra giải pháp cho các vấn đề. Tôi không chọc. Tôi xin lỗi tôi đã làm tổn thương cảm xúc của bạn, nhưng thực tế là câu hỏi của bạn sai, câu trả lời là sai, và tất cả những thông tin gây hiểu lầm này sẽ dẫn đến những người lập trình mới làm quen, những người có cùng vấn đề như bạn mô tả, sử dụng các giải pháp không hoạt động dựa trên mã bạn đã cung cấp. Đó là không có trường hợp có liên quan hay không nếu tôi là một chuyên gia hay không. Đặc biệt là không phải vì tôi đúng, câu hỏi của bạn là mơ hồ, và câu trả lời khác là sai. – slinden77

Trả lời

252

Khi @dmmh cho biết mã sẽ không hoạt động nếu không có và biểu tượng. Vì vậy, sau khi sửa đổi mã với

.setSmallIcon (R.drawable.icon)

dự án chạy một cách hoàn hảo trước khi oreo.

Nhưng hình thức thông báo oreo cần NotificationChannelNotificationCompat.Builder(this) bị phản đối, hãy thử nó:

NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001"); 
     Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0); 

     NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle(); 
     bigText.bigText(verseurl); 
     bigText.setBigContentTitle("Today's Bible Verse"); 
     bigText.setSummaryText("Text in detail"); 

     mBuilder.setContentIntent(pendingIntent); 
     mBuilder.setSmallIcon(R.mipmap.ic_launcher_round); 
     mBuilder.setContentTitle("Your Title"); 
     mBuilder.setContentText("Your text"); 
     mBuilder.setPriority(Notification.PRIORITY_MAX); 
     mBuilder.setStyle(bigText); 

     NotificationManager mNotificationManager = 
       (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 


     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 
      NotificationChannel channel = new NotificationChannel("notify_001", 
        "Channel human readable title", 
        NotificationManager.IMPORTANCE_DEFAULT); 
      mNotificationManager.createNotificationChannel(channel); 
     } 

     mNotificationManager.notify(0, mBuilder.build()); 
+141

HOLY GOD TẠI SAO NÀY KHÔNG ĐƯỢC TÀI LIỆU? Tôi chỉ mất 2 giờ trong cuộc đời của tôi đập đầu tôi chống lại điều này mà tôi sẽ không bao giờ quay trở lại. – steve

+22

bạn có thể đã chấp nhận câu trả lời của tôi thay vào đó, đó là điều tốt để làm;) – slinden77

+0

@steve: Tôi gần như mất một ngày trước khi tôi tìm ra điều này: D – slinden77

1

Tôi nghĩ rằng bạn quên

addAction(int icon, CharSequence title, PendingIntent intent) 

nhìn đây Add Action

+1

phương thức 'addAction()' không có sẵn trên 'Notification.Builder'. – slinden77

+0

Nó tồn tại, nhưng không được chấp nhận. Thay vào đó, bạn có thể truyền một thể hiện 'Action' mà bạn có thể tạo với' Notification.Action.Builder'. Tái bút: Luôn sử dụng thay thế Compat (tức là, NotificationCompat), vì Google có xu hướng vá lỗi và cung cấp khả năng tương thích tốt hơn với chúng –

+0

Nếu bạn không muốn chỉ định bất kỳ hành động nào, chỉ cần sử dụng '.setContentIntent (null)' với trình tạo. –

46

Thực ra câu trả lời bởi @ tato469 dường như không được chính xác. Sau đó, một lần nữa, câu hỏi của bạn là quá mơ hồ bởi vì bạn không đề cập đến những gì là sai hoặc không hoạt động.

Nhìn vào mã của bạn Tôi giả định rằng Notification chỉ đơn giản là không hiển thị.

Thông báo của bạn không hiển thị vì bạn không cung cấp biểu tượng. Mặc dù tài liệu SDK không đề cập đến nó là bắt buộc, nhưng thực tế nó rất nhiều và Notification của bạn sẽ không hiển thị mà không có tài liệu.

addAction chỉ khả dụng kể từ 4.1. Trước đó, bạn sẽ sử dụng PendingIntent để khởi chạy Activity. Bạn dường như chỉ định một PendingIntent, do đó, vấn đề của bạn nằm ở nơi khác. Về mặt logic, người ta phải kết luận đó là biểu tượng bị thiếu.

+0

tôi đã tìm thấy sự cố đó. Nhưng cảm ơn cho trả lời thích hợp. Tôi thực sự đánh giá cao sự giúp đỡ của bạn. –

+0

Bạn nói rằng addAction chỉ có sẵn từ 4.1 nhưng nó là sai, tôi đã sử dụng nó trong 2.3. Hướng dẫn tham khảo nói về nút không phải về thông báo: "Các nút tác vụ sẽ không xuất hiện trên nền tảng trước Android 4.1." bạn có thể kiểm tra ở đây: [AddAction] (http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#addAction%28int,%20java.lang.CharSequence,%20android.app .PendingIntent% 29) được bao gồm trong android.support.v4.app –

+0

OP đang sử dụng 'Notification.Builder', không phải' NotificationCompat.Builder', như bạn đang đề xuất. Chỉ vì có một thư viện tương thích và nó có thể được sử dụng, không có nghĩa là hàm có sẵn trong API bình thường. Liên kết bạn cung cấp thực sự quy định điều này. Câu hỏi này rõ ràng liên quan đến 'Notification.Builder', như ví dụ cho thấy. Và thư viện tương thích có lẽ chỉ bao gồm chức năng này sau khi đã có 4.1. Câu trả lời của bạn là gây hiểu nhầm, bởi vì bây giờ bạn đề nghị câu trả lời đã có sẵn từ 2.3. – slinden77

13

Bạn bị mất tích vào biểu tượng nhỏ. Tôi đã phạm sai lầm tương tự và bước trên đã giải quyết được.

Theo tài liệu chính thức: Một đối tượng Notification phải chứa sau:

  1. Một biểu tượng nhỏ, được thiết lập bởi setSmallIcon()

  2. Một tiêu đề, được thiết lập bởi setContentTitle()

  3. chi tiết văn bản, được đặt bởi setContentText()

  4. Trên Android 8.0 (API cấp 26) và cao hơn, ID kênh thông báo hợp lệ, được đặt bởi setChannelId() hoặc được cung cấp trong trình tạo thông báo NotificationCompat.Builder khi tạo kênh.

Xem http://developer.android.com/guide/topics/ui/notifiers/notifications.html

Các vấn đề liên quan