我应该如何为我的应用程序更改Pushnotification图标

时间:2019-08-21 06:04:23

标签: android push-notification firebase-cloud-messaging

我想更改我的推送通知图标。

代码段:

Initial Sequence Number

2 个答案:

答案 0 :(得分:0)

不幸的是,这是SDK 9.0.0-9.6.1中Firebase通知的限制。当应用程序在后台运行时,将从清单(带有必要的Android着色)中使用启动器图标处理从控制台发送的消息。

但是,使用SDK 9.8.0时,您可以覆盖默认值!在您的AndroidManifest.xml中,您可以设置以下字段来自定义图标和颜色:

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

请注意,如果应用程序位于前台(或发送了数据消息),则可以完全使用自己的逻辑来自定义显示。如果从HTTP / XMPP API发送消息,也可以始终自定义图标。

您必须将此标签放入清单的Application标签

官方文档-https://firebase.google.com/docs/cloud-messaging/android/client

感谢这个人-https://stackoverflow.com/a/37332514/4741746

答案 1 :(得分:0)

它太简单了,但是您必须仔细做。

首先,为您的通知设置一个黑白图标。 现在,将其在notification中设置为small icon,如下所示。

mBuilder.setSmallIcon(R.mipmap.notification_icon);

现在您可以设置颜色,但是如果我对,那么您只能设置预定义的颜色而不是自定义的颜色。对于自定义颜色,您可以尝试使用自己的逻辑,我为您提供了预定义颜色的代码。

 mBuilder.setColor(Color.GREEN);

它将使您的notification icon颜色变为绿色。 快乐编码!

更新
自定义通知代码。

PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
            0 /* Request code */, resultIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    Uri soundUri = Uri.parse("android.resource://" + mContext.getApplicationContext()
            .getPackageName() + "/" + R.raw.sniper_gun);


    mBuilder = new NotificationCompat.Builder(mContext);
    mBuilder.setSmallIcon(R.mipmap.notification_icon);
    mBuilder.setSound(soundUri);
    if (image!=null) {
        mBuilder.setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(false)
                .setLargeIcon(image)
                .setStyle(new NotificationCompat.BigPictureStyle()
                        .bigPicture(image).setSummaryText(message).bigLargeIcon(null))
                .setColor(Color.GREEN)
                .setContentIntent(resultPendingIntent);
    }
//        else {
//            mBuilder.setContentTitle(title)
//                    .setContentText(message)
//                    .setAutoCancel(false)
//                    .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
//                    .setContentIntent(resultPendingIntent);
//        }

    mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});

        // set custom soundUri
        if(soundUri != null){
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_ALARM)
                    .build();
            notificationChannel.setSound(soundUri,audioAttributes);
        }

        assert mNotificationManager != null;
        mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
        mNotificationManager.createNotificationChannel(notificationChannel);
    }
    assert mNotificationManager != null;
    mNotificationManager.notify(0 /* Request Code */, mBuilder.build());