2013-06-08 25 views
5

tôi đang tạo ra thông báo của tôi như thế này:thông báo android hình ảnh lớn không làm việc

 Intent intent = new Intent(this, OfferNotification.class); 
     PendingIntent pIntent = PendingIntent.getActivity(this, 0, 
       intent, 0); 
     Uri soundUri = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       this).setSmallIcon(R.drawable.unknown) 
       //.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.unknown)) 
       .addAction(R.drawable.ic_launcher, "d", pIntent) 
       .setAutoCancel(true) 
       .setContentTitle("Offer from " + restaurantName) 
       .setContentText(offerDescriptoin).setSound(soundUri); 
     // Creates an explicit intent for an Activity in your app 
     Intent resultIntent = new Intent(this, OfferNotification.class); 
     resultIntent.putExtra("offerID", offer.getID()); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 

     stackBuilder.addParentStack(OfferNotification.class); 

     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = stackBuilder 
       .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     mNotificationManager.notify(offer.getID(), mBuilder.build()); 

khi tôi sử dụng biểu tượng nhỏ, nó hoạt động rất tốt, nhưng khi tôi sử dụng biểu tượng lớn, tôi có thể tóc giọng nói của nofitication nhưng bản thân thông báo không xuất hiện, bất kỳ pelase trợ giúp nào?

+1

nếu bạn đang liên kết để chạy mã này trong <3,0 os android thì nó không hoạt động. có nghĩa là NotificationCompat hoạt động trong> 11 API. –

+0

tôi đang sử dụng 2,3 với hỗ trợ v4, mã đang hoạt động, chỉ cần biểu tượng larg không hoạt động –

+0

trong hỗ trợ v4 không có hỗ trợ có sẵn cho NotificationCompat.Builder. sắp xếp bạn không thể làm điều này trong <11 Android API. (Tôi hiểu vấn đề của bạn nhưng bạn có thể sử dụng cách này -> http://stackoverflow.com/a/8869647/1168654) –

Trả lời

7

Biểu tượng Android (và các yếu tố giao diện người dùng khác, như độ dài kéo) được đo bằng dp. Một dp là một điểm ảnh thiết bị/mật độ độc lập. 1 dp tương đương với 1 px trên màn hình 160 dpi. Nhưng để chuyển đổi sang mật độ màn hình khác, bạn cần nhân nó với hệ số mật độ. Vì vậy, nó thường được khuyến cáo rằng nhiều hình ảnh được cung cấp cho hầu hết các biểu tượng. Ví dụ: biểu tượng thông báo được sử dụng trên thanh trạng thái được chỉ định là 24x24 dp, với biên độ 1 dp (do đó biểu tượng thực chỉ chiếm một hình vuông quang 22x22 dp, mặc dù một số AA có thể bị tràn vào đó 1 dp margin/safeframe). Để chuyển đổi 24 dp để kích thước điểm ảnh thực tế, những tính toán thô được sử dụng:

display density dp units * scale = px units 
ldpi ~120 dpi 24x24 dp * .75 = 18x18 px 
mdpi ~160 dpi 24x24 dp * 1.0 = 24x24 px 
hdpi ~240 dpi 24x24 dp * 1.5 = 36x36 px 
xhdpi ~320 dpi 24x24 dp * 2.0 = 48x48 px 

Ngoài ra còn có một mật độ hiển thị trung gian gọi là tvdpi (~ 213 dpi) mà ngồi giữa mdpi và hdpi và có một yếu tố quy mô 1,33, nhưng điều này ít phổ biến hơn. Những gì các tài liệu Android đề nghị là bạn làm theo tỷ lệ tỉ lệ 3: 4: 6: 8 khi cung cấp hình ảnh bitmap đã được lập trước (thường là PNG) cho mật độ hiển thị phổ biến nhất.

Tôi không thấy bất cứ nơi nào họ chỉ định kích thước dp cho các biểu tượng lớn được sử dụng trong thông báo, nhưng chiều cao của mỗi thông báo trong chế độ xem hộp thư đến thông thường là 64 dp. Vì vậy, đó có nghĩa là kích thước tối đa cho các biểu tượng/hình ảnh hiển thị ở đó sẽ là:

ldpi:  48x48 px 
mdpi:  64x64 px 
hdpi:  96x96 px 
xhdpi: 128x128 px 

Nếu bạn muốn biết chính xác những gì hình ảnh kích thước biểu tượng chứng khoán Android đang có, bạn sẽ có thể tìm hiểu từ Android Biểu tượng Templates Pack, v4.0.

1

Tôi nghĩ bạn nên giải mã bitmap trước khi yêu cầu cho nó trong Builder, như thế này:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.unknown); 
Intent intent = new Intent(this, OfferNotification.class); 
     PendingIntent pIntent = PendingIntent.getActivity(this, 0, 
       intent, 0); 
     Uri soundUri = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       this).setSmallIcon(R.drawable.unknown) 
       //.setLargeIcon(bitmap) 
       .addAction(R.drawable.ic_launcher, "d", pIntent) 
       .setAutoCancel(true) 
       .setContentTitle("Offer from " + restaurantName) 
       .setContentText(offerDescriptoin).setSound(soundUri); 

Nó có lẽ không giải mã chính xác hoặc trong thời gian. Nó cũng sẽ loại bỏ một điều chưa biết ở đây.

+0

Tôi đã thử giải pháp ur, tôi vẫn có thể làm tóc bằng giọng nói khi sử dụng biểu tượng larg –

+0

Mã này đang chạy trên một chuỗi đơn (giao diện người dùng). Không có điều kiện chủng tộc. Dường như phương thức 'setLargeIcon' được nhận xét. –

+0

Nó không tạo sự khác biệt – bendaf

3

Tôi đã có cùng một nguyên nhân khiến tôi bỏ lỡ các cuộc gọi cho SetSmallIcon và SetLargeIcon. Bạn phải chỉ định một biểu tượng nhỏ, nếu không thông báo sẽ không được hiển thị. Biểu tượng lớn là tùy chọn và nếu không được đặt, biểu tượng nhỏ sẽ được sử dụng.

+0

Cảm ơn bạn. Điều này đã giúp tôi. –