当应用程序不在后台时,没有得到大图标

时间:2019-03-04 11:39:26

标签: android android-intent push-notification

我正在使用以下代码设置用于推送通知的大图标。

 new NotificationCompat.Builder(this, channelId)
                    .setSmallIcon(R.drawable.logo)
                    .setContentTitle(notification.getTitle())
                    .setContentText(notification.getBody())
                    .setAutoCancel(true)
                    .setColor(getResources().getColor(R.color.green))
                    .setSound(defaultSoundUri)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.logo))
                    .setPriority(Notification.PRIORITY_MAX)
                    .setContentIntent(pendingIntent);

这可以正常工作,当应用程序位于前景中时显示largeIcon,但是当应用程序不在前景中时,它不显示大图标。

我正在samsung s7(oreo)中测试该应用

5 个答案:

答案 0 :(得分:5)

仅当您的应用程序位于前台时,您粘贴的代码片段才能正常运行,因为仅当应用程序位于前台时才被调用。当应用程序处于后台时,Android系统将为您显示通知(基于服务器发送到设备的JSON对象中的“ notification”对象)。根本没有呼叫您的接收器。当前,Firebase Cloud Messaging不支持将大图标设置为请求中的有效负载。

一种解决方法是在消息的POST负载中不包括“ notification”对象。当您仅在有效负载中包含“数据”对象时,即使您的应用程序在后台,也会要求接收者处理通知。然后,您可以按照与应用程序在前台相同的方式构建通知,并为该通知设置一个大图标。

请查看this answer,以获取有关此问题的更详细说明。

答案 1 :(得分:4)

尝试一下,

建议您设置默认值以自定义通知的外观。您可以指定一个自定义默认图标和一个自定义默认颜色,只要在通知有效负载中未设置等效值时就应用该自定义默认图标。

在应用程序标记内添加以下行以设置自定义默认图标和自定义颜色:

  <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />


    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />

答案 2 :(得分:1)

设置您的应用程序图标透明

android:icon="@drawable/icon_transper"

并在AndroidManifest中添加此石灰

<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/gardi" />
<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />

如果将应用程序图标设置为透明,则可以将其作为后台的通知图标。

首选此链接以生成通知图标。

https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=clipart&source.clipart=ac_unit&source.space.trim=1&source.space.pad=0&name=ic_stat_ac_unit

希望这对您有帮助!

谢谢。

答案 3 :(得分:0)

重试一次。.您将图标存储在可绘制文件夹中的位置..所有文件夹,例如hdpi,xhdpi,xxhdpi ..请重试一次。

答案 4 :(得分:0)

您需要检查版本。如果版本> = Oreo,则需要添加频道ID。请查看下面对我有用的示例代码:

  public void createNotification(Bitmap bitmap, String aMessage, Context context, int icon, String titles, String noti_id, String mid, String att_url, String mname) {
        NotificationManager notifManager = null;
        final int NOTIFY_ID = 0; // ID of notification
        String id = context.getString(R.string.default_notification_channel_id); // default_channel_id
//        String title = context.getString(R.string.default_notification_channel_id); // Default Channel
        String title = titles;
        Intent intent;
        PendingIntent pendingIntent;
        NotificationCompat.Builder builder;
        NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();

        bigPictureStyle.setBigContentTitle(title);
        String msg = aMessage;
//        bigPictureStyle.setSummaryText("Summary text appears on expanding the notification");
        bigPictureStyle.setSummaryText(msg);
        bigPictureStyle.bigPicture(bitmap);
        if (notifManager == null) {
            notifManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }
        String m_namse = "Marwadi University - " + mname;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel mChannel = notifManager.getNotificationChannel(id);
            if (mChannel == null) {
                mChannel = new NotificationChannel(id, title, importance);
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                notifManager.createNotificationChannel(mChannel);
            }
            builder = new NotificationCompat.Builder(context, id);
            intent = new Intent(context, FullScreenActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
//            List<String> test = new ArrayList<String>();
//            test.add();
            intent.putExtra("title", titles);
            intent.putExtra("body", aMessage);

            ConstantData.setNotificaitonId(context);
//            ConstantData.getNotificaitonId(context);
            bundle.putString("values", str);
            intent.putExtra("img_path", imageUri);
            intent.putExtra("n_id", noti_id);
            intent.putExtras(bundle);

            pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            builder.setContentTitle(aMessage)                            // required
                    .setSmallIcon(R.drawable.mu_top_white)   // required

                    .setContentText(m_namse) // required
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setAutoCancel(true)
                    .setStyle(bigPictureStyle)
                    .setContentIntent(pendingIntent)
                    .setTicker(aMessage)
                    .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                    .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        } else {
            builder = new NotificationCompat.Builder(context, id);
//            intent = new Intent(context, AllNotificationActivity.class);
            intent = new Intent(context, FullScreenActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putExtra("title", titles);
            intent.putExtra("body", aMessage);
//            intent.putExtra("img_path", imageUri);
            intent.putExtra("img_path", imageUri);
            intent.putExtra("n_id", noti_id);
            intent.putExtra("mid", mid);

            ConstantData.setNotificaitonId(context);


            pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            builder.setContentTitle(aMessage)                            // required
                    .setSmallIcon(R.drawable.mu_top_white)   // required
                    .setContentText(m_namse) // required
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setAutoCancel(true)
                    .setStyle(bigPictureStyle)
                    .setContentIntent(pendingIntent)
                    .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                    .setTicker(aMessage)
                    .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                    .setPriority(Notification.PRIORITY_HIGH);
        }
        Notification notification = builder.build();
        notifManager.notify(NOTIFY_ID, notification);
    }
And then Simple call this method:

createNotification(bitmap, message, mContext, R.drawable.main_logo, title, noti_id, mid, att_url, msg);