带有折叠模式图片的Android通知

时间:2018-04-27 15:41:38

标签: android android-notifications

我最近看到了一则YouTube通知,其中图片显示在通知的折叠视图中。

现在我知道并且已经使用通知的BigPictureStyle在通知扩展时显示图像。但是在使用此模式时,折叠通知仅显示摘要文本,而不显示图像的小缩略图。

YouTube通知以折叠模式显示图像的缩略图,以及展开时通常的大图片样式大图像。这不是大图标,因为通知扩展时,大图标是YouTube频道缩略图,图片显示在大图片部分。

我将如何实现这样的目标?这是一个自定义远程视图,它扩展为一个大图片视图吗?

我不知道如何做到这一点。我目前的代码是:

            try{

               NotificationCompat.Builder builder = new NotificationCompat.Builder(this,UserRewardChannel);

                builder.setAutoCancel(true);

                builder.setContentTitle(remoteMessage.getData().get("messagetitle"));

                builder.setContentText(remoteMessage.getData().get("messagebody"));

                builder.setSmallIcon(R.drawable.ic_foodini_notif);
                builder.setColor(ContextCompat.getColor(this,R.color.colorAccent));

                builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher2));

                Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

                builder.setSound(defaultSoundUri);

                builder.setVibrate(new long[]{0,100,100,100});

                if(Boolean.parseBoolean(remoteMessage.getData().get("hasimage"))){

                    Bitmap image=null;

                    Response response = null;

                    try {

                        OkHttpClient client = new OkHttpClient.Builder()
                                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                                .readTimeout(10000,TimeUnit.MILLISECONDS)
                                .retryOnConnectionFailure(false)
                                .build();

                        Request request = new Request.Builder()
                                .url(remoteMessage.getData().get("imageurl"))
                                .build();

                        response = client.newCall(request).execute();

                        InputStream imageStream = response.body().byteStream();

                        image = BitmapFactory.decodeStream(imageStream);

                    } catch (Exception e) {
                        //Log.d("FragmentCreate","Some error occured while creating the notification in debug mode",e);
                    }finally {
                        try {
                            response.close();
                        }catch (Exception e){
                            //Do nothing
                        }
                    }

                    if(image!=null){
                        builder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(image).setSummaryText(remoteMessage.getData().get("messagebody")));

                    }else{
                        builder.setStyle(new NotificationCompat.BigTextStyle().setSummaryText(remoteMessage.getData().get("messagebody")).bigText(remoteMessage.getData().get("messagebody")));
                    }

                }else{
                    builder.setStyle(new NotificationCompat.BigTextStyle().setSummaryText(remoteMessage.getData().get("messagebody")).bigText(remoteMessage.getData().get("messagebody")));
                }

                int notif_id=(int)(System.currentTimeMillis()%10000);

                NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());

                notificationManagerCompat.notify(notif_id,builder.build());

            } catch (Exception e) {
                //Log it
            }

preview of the youtube notification

2 个答案:

答案 0 :(得分:0)

看起来他们使用自定义视图作为折叠视图,而使用扩展视图则使用本机大图像样式。

观看以下视频:https://youtu.be/U-XhYDWIpKE (请注意视图中的小时)。

答案 1 :(得分:0)

您将需要创建自定义通知布局。有关如何创建这些文件的指南,请访问:

https://developer.android.com/training/notify-user/custom-notification

此链接上的代码描述了如何设置通知的较小且扩展的布局