android通知大图片无效

时间:2013-06-08 07:15:53

标签: android android-notifications

我正在创建这样的通知:

        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());

当我使用小图标时,效果非常好,但是当我使用大图标时,我可以发出通知的声音,但通知本身不会出现,有什么帮助pelase?

3 个答案:

答案 0 :(得分:7)

Android图标(以及其他UI元素,如拖动长度)以dp为单位。 dp是与器件/密度无关的像素。在160 dpi屏幕上,1 dp相当于1 px。但要转换为其他屏幕密度,您需要将其乘以密度因子。因此,通常建议为大多数图标提供多个图像。

例如,状态栏中使用的通知图标被指定为24x24 dp,具有1 dp边距(因此实际图标仅占用22x22 dp光学方块,但是一些AA可以流入该1 dp余量/的SafeFrame)。要将24 dp转换为实际像素大小,请使用以下粗略计算:

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

还有一个名为tvdpi(~213 dpi)的中间显示密度,位于mdpi和hdpi之间,比例因子为1.33,但这种情况要少得多。 Android文档推荐的是,在为最常见的显示密度提供预分频位图图像(通常为PNG)时,遵循3:4:6:8缩放比例。

我没有看到他们为通知中使用的大图标指定dp大小的任何地方,但正常收件箱视图中每个通知的高度为64 dp。这意味着显示的图标/图像的最大尺寸为:

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

如果您想知道Android的股票图标的确切尺寸,您应该可以从Android图标模板包,v4.0中找到。

答案 1 :(得分:3)

我有同样的问题,因为我错过解释了对SetSmallIcon和SetLargeIcon的调用。 您必须指定一个小图标,否则不会显示通知。大图标是可选的,如果没有设置,则使用小图标。

答案 2 :(得分:1)

我认为你应该在生成器中询问之前解码位图,如下所示:

 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);

它可能无法正确解码或及时解码。它也会在这里消除一个未知的。