2013-08-15 56 views
32

Đây là mã của tôi để thiết lập thông báo bằng các nút.Các nút Thông báo của Android không hiển thị

Intent receiverIntent = new Intent(ctx, ResponsivePrefsActivity.class); 
     PendingIntent pReceiverIntent = PendingIntent.getActivity(ctx, 1, receiverIntent, 0); 
     Intent clearIntent = new Intent(ctx, ResponsivePrefsActivity.class); 
     clearIntent.setAction("clear"); 
     PendingIntent pClearIntent = PendingIntent.getActivity(ctx, 1, clearIntent, 0); 

     Intent colorsIntent = new Intent(ctx, ResponsivePrefsActivity.class); 
     colorsIntent.setAction("colors"); 
     PendingIntent pColorsIntent = PendingIntent.getActivity(ctx, 1, colorsIntent, 0); 

     Intent animationIntent = new Intent(ctx, ResponsivePrefsActivity.class); 
     animationIntent.setAction("animation"); 
     PendingIntent pAnimation = PendingIntent.getActivity(ctx, 1, animationIntent, 0); 

     Notification.Builder builder; 
     builder = new Notification.Builder(ctx).setSmallIcon(R.drawable.ic_launcher).setAutoCancel(false) 
       .setContentTitle("Draw Me: A Live Wallpaper").setContentText("Never get bored again!") 
       .setContentIntent(pReceiverIntent).addAction(R.raw.ic_menu_close_clear_cancel, "Clear", pClearIntent) 
       .addAction(R.raw.ic_menu_edit, "Colors", pColorsIntent).addAction(R.raw.ic_menu_play_clip, "Animation", pAnimation); 
     Notification notification = builder.build(); 

     NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0, notification); 

Thông báo hiển thị nhưng các nút thì không. Thiết bị của tôi có Android 4.1.1 Tôi thiết lập thông báo này trong Phân đoạn. Tôi đang làm gì sai? Cảm ơn!

Trả lời

114

Hãy để tôi nói với bạn điều gì đó mà thực sự lúng túng. Nếu bạn có bất cứ điều gì trong Thông báo liên tục của mình, Bạn sẽ không thấy các nút. Thông thường nó xảy ra khi bạn có điện thoại kết nối với PC qua USB. Hy vọng điều này sẽ giải quyết được vấn đề của bạn

+7

Câu trả lời của năm ....Tôi đổ lỗi cho bản cập nhật hệ điều hành mới nhất mà tôi đã thực hiện (4.2.2) nhưng không phải là lỗi trực tiếp của nó .... –

+2

Câu trả lời này xứng đáng nhận được nhiều ưu điểm hơn !! – Swayam

+17

câu trả lời hay. Tôi cũng đã giải quyết vấn đề này bằng cách sử dụng câu trả lời @Captain Blammo bằng cách gọi .setPriority (Notification.PRIORITY_MAX) trên trình xây dựng noticiation của tôi. Bằng cách này bạn vẫn có thể thấy các nút ngay cả khi bạn kết nối qua USB – Jake

-1

Chỉ cần làm một số thay đổi như thế này trong bạn code

Notification n = new Notification.Builder(this) 
       .setSmallIcon(R.drawable.icon) 
       .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); 

Thêm những gì bạn cần trong này .. Tôi hy vọng nó sẽ giúp bạn ..

+0

Tôi đã có điều đó vì nó có thể được nhìn thấy. Tôi không cần phương thức setStyle vì tôi muốn các nút nhỏ. Những gì tôi đã học được mặc dù là các nút không được hiển thị khi máy tính bảng được kết nối với máy tính thông qua USB. Khi tôi làm hỏng máy tính bảng, các nút xuất hiện. Điều này đã xảy ra trên E-BODA Impresspeed E200 và Samsung Galaxy Note 10.1 với cả JB. Đây chỉ là điên rồ, nửa ngày lãng phí! Còn có ai gặp vấn đề này nữa không? – DraganescuValentin

+0

Đó là một lỗi trong khá nhiều thiết bị Android của Samsung. Vì vậy, bạn không phải là người duy nhất phải đối mặt với vấn đề này. Như thường lệ, Samsung phá vỡ chức năng Android với ... Điện thoại – ChuongPham

26

Chỉ là lời nhắc cho bất kỳ ai có vấn đề tương tự. Theo Android Notifications Guide, thông báo có thể xuất hiện trong hai phong cách:

  • Normal View, nơi các nút hành động không xuất hiện theo mặc định (và người dùng phải mở rộng thông báo, để cho chúng xuất hiện)
  • Chế độ xem lớn, hiển thị nếu thông báo là lần đầu tiên trong danh sách thông báo hoặc người dùng đã mở rộng thông báo.

Do đó để buộc thông báo xuất hiện trong Chế độ xem lớn, tất cả những gì chúng ta phải làm chỉ đơn giản là đặt nó lên đầu danh sách Thông báo. Điều đó có thể được thực hiện bằng cách đặt thuộc tính When thành 0 làm cho nó trở thành thông báo cũ nhất trong số các thông báo! (Đôi khi chúng tôi có thể không muốn điều này). Vì vậy, hãy gọi

setWhen(0) 

thông báo của bạn và bạn đã hoàn tất.

+7

Hoặc thậm chí tốt hơn nên đặt mức độ ưu tiên của thông báo thành MAX! setPriority (Notification.PRIORITY_MAX) – vkolias

+1

Bạn nên thêm rằng làm câu trả lời! Cầu xin Chúa ban phước lành cho bạn! – Swayam

+3

Tôi đã kết thúc việc phải đặt cả hai 'setWhen (0)' và 'setPriority (MAX)' để có tác phẩm này trên android 4.4 – Calin

21

Các nút sẽ không xuất hiện khi có bất kỳ Thông báo đang diễn ra nào trong danh sách, chẳng hạn như điều khiển trình phát media hoặc tùy chọn trình chuyển IME khi bạn đang chỉnh sửa văn bản.

May mắn thay, điều này có thể được khắc phục đơn giản bằng cách đặt mức ưu tiên của thông báo đẹp và cao. Tôi đã từng sử dụng Notification.PRIORITY_MAX để giải quyết vấn đề này, nhưng PRIORITY_HIGH dường như cũng hoạt động. Thiết lập nó như thế này:

Notification notification = new Notification.Builder(myContext) 
.setContentTitle(res.getString(R.string.my_title)) 
.setPriority(Notification.PRIORITY_MAX) 
//The rest of your options 
.build(); 
+0

Điều này chỉ hoạt động đối với api> = 16, btw –

16

Just Do này :::

.setPriority(Notification.PRIORITY_MAX) 
.setWhen(0) 

mã đầy đủ là:

Notification noti = new Notification.Builder(this) 
      .setContentTitle("New mail from " + "[email protected]") 
      .setContentText("Subject").setSmallIcon(R.drawable.ic_launcher) 
      .setContentIntent(pIntent) 
      .setPriority(Notification.PRIORITY_MAX) 
      .setWhen(0) 
      .addAction(R.drawable.ic_launcher, "Call", pIntent) 
      .addAction(R.drawable.ic_launcher, "More", pIntent) 
      .addAction(R.drawable.ic_launcher, "And more", pIntent).build();