Не отображается Большой значок, когда приложение не в фоновом режиме - PullRequest
0 голосов
/ 04 марта 2019

Я устанавливаю большой значок для push-уведомлений, используя следующий код.

 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)

Ответы [ 6 ]

0 голосов
/ 14 марта 2019

Вам необходимо проверить версию.Если версия> = Oreo, вам нужно добавить идентификатор канала.Пожалуйста, посмотрите пример кода ниже, который работает для меня:

  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);
0 голосов
/ 14 марта 2019

Установите значок приложения прозрачный

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

Надеюсь, это поможет вам!

СпасибоВы.

0 голосов
/ 13 марта 2019

попробуйте один раз .. Где вы храните свой значок в папке для рисования ... все папки, такие как hdpi, xhdpi, xxhdpi .. Пожалуйста, попробуйте это один раз ..

0 голосов
/ 11 марта 2019

Код, который вы опубликовали, работает нормально только тогда, когда ваше приложение находится на переднем плане, потому что он вызывается только тогда, когда приложение находится на переднем плане.Когда приложение находится в фоновом режиме, система Android отображает уведомление для вас (на основе объекта «уведомления» в объекте JSON, который сервер отправляет на устройство).Ваш получатель не вызывается вообще.В настоящее время Firebase Cloud Messaging не поддерживает установку большого значка в качестве полезной нагрузки в запросе.

Обходной путь - не включать объект уведомления в полезную нагрузку POST сообщения.Когда вы включаете только объект «data» в полезную нагрузку, вашему получателю будет предложено обработать уведомление, даже если ваше приложение находится в фоновом режиме.Затем вы можете создать уведомление так же, как если бы приложение находилось на переднем плане, и установить большой значок для уведомления.

Посмотрите на этот ответ для более подробного объяснения.об этой проблеме.

0 голосов
/ 11 марта 2019

Это потому, что вам нужно сначала установить большую иконку, а затем маленькую иконку, также вы не должны использовать векторные изображения как большую иконку.Используйте изображения в формате JPEG или PNG.

new NotificationCompat.Builder(this, channelId)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.logo))
                .setSmallIcon(R.drawable.logo)
                .setContentTitle(notification.getTitle())
                .setContentText(notification.getBody())
                .setAutoCancel(true)
                .setColor(getResources().getColor(R.color.green))
                .setSound(defaultSoundUri)
                .setPriority(Notification.PRIORITY_MAX)
                .setContentIntent(pendingIntent);
0 голосов
/ 09 марта 2019

Попробуйте,

. Рекомендуется установить значения по умолчанию для настройки внешнего вида уведомлений.Вы можете указать пользовательский значок по умолчанию и пользовательский цвет по умолчанию, которые применяются, когда в полезной нагрузке уведомления не заданы эквивалентные значения.

Добавьте эти строки внутри тега приложения, чтобы установить пользовательский значок по умолчанию и пользовательский цвет:

  <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" />
...