You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android新手求助:如何实现FCM大图片样式通知?

解决Android FCM大图片样式通知的问题

嘿,作为Android开发新手能搞定FCM通知已经很棒了!我看了你的代码,问题出在你创建了BigPictureStyle但没把它应用到通知构建器里,反而用了BigTextStyle,这就是大图片样式没生效的核心原因。我来帮你修正代码,一步步实现大图片通知:

问题分析

你代码里已经实例化了Notification.BigPictureStyle bigpicture = new Notification.BigPictureStyle();并设置了bigpicture.bigPicture(bmp);,但最后给setStyle()传的却是BigTextStyle,相当于完全没启用大图片样式。另外要区分:setLargeIcon()是设置通知左侧的圆形大图标,而BigPictureStyle是通知展开后显示的大幅图片,两者是不同的功能。

修正后的完整代码

下面是调整后的ManualNotification方法,我标注了关键修改点:

private void ManualNotification(String title, String messageBody) {
    Intent intent = new Intent(this, MainActivity.class);
    Bundle bundle = new Bundle();
    bundle.putString("message", messageBody);
    intent.putExtras(bundle);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

    // 1. 准备大图片的Bitmap(这里用你本地的mipmap资源,没问题)
    Bitmap bigPictureBitmap = BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher);

    // 2. 配置BigPictureStyle
    NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
            .bigPicture(bigPictureBitmap) // 设置展开后显示的大图片
            .bigLargeIcon(null) // 可选:展开后隐藏左侧大图标,让大图片更突出
            .setBigContentTitle(title) // 展开后的标题
            .setSummaryText(messageBody); // 展开后的摘要文本

    // 3. 构建通知,把BigPictureStyle设置进去
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.notifcation) // 必须设置的状态栏小图标
            .setContentTitle(title)
            .setContentText(messageBody)
            .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher)) // 左侧的大图标(可选)
            .setContentIntent(pendingIntent)
            .setStyle(bigPictureStyle) // 关键:应用大图片样式,替换原来的BigTextStyle
            .setLights(Color.YELLOW, 300, 300)
            .setVibrate(new long[]{100, 250})
            .setDefaults(Notification.DEFAULT_SOUND)
            .setAutoCancel(true);

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0, notificationBuilder.build());
}

关键说明

  • BigPictureStyle核心设置bigPicture()传入的是展开后显示的大图,推荐尺寸为1024x512像素,这样在不同设备上显示效果更好,避免拉伸变形。
  • 可选优化bigLargeIcon(null)可以让通知展开后隐藏左侧大图标,让大图片占据更多空间;setBigContentTitlesetSummaryText可以自定义展开后的文本内容,和折叠状态的文本区分开。
  • 网络图片处理:如果你的大图片来自网络,不能直接在主线程下载,需要用异步任务或图片加载库(如Glide、Picasso)先下载Bitmap,再构建通知。比如用Glide的示例:
    Glide.with(this)
         .asBitmap()
         .load("你的图片URL")
         .into(new CustomTarget<Bitmap>() {
             @Override
             public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                 // 在这里用下载好的resource构建通知
             }
    
             @Override
             public void onLoadCleared(@Nullable Drawable placeholder) {}
         });
    

测试注意事项

  • 确保通知可展开:部分设备默认折叠通知,需要下拉通知栏才能看到大图片效果。
  • 检查图片资源:确认R.mipmap.ic_launcher是你想要展示的大图,或者替换成自己的图片资源。

内容的提问来源于stack exchange,提问作者Doblist Doblist

火山引擎 最新活动