Значок уведомления не изменяется с .setSmallIcon - PullRequest
2 голосов
/ 09 апреля 2019

Я внедряю уведомления в android.Я хочу изменить значок уведомления, но проблема в том, что setSmallIcon не работает.Мой пользовательский значок отображается на устройстве lollipop, но не отображается на пользовательском значке выше lollipop устройств.

Я пробовал следующий код:

send_notification.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.book2);

                NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this)
                        .setContentTitle("New Book Added")
                        .setContentText("Android with java")
                        .setStyle(new NotificationCompat.BigPictureStyle()
                                    .bigPicture(icon)
                                    .bigLargeIcon(null));
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    builder.setSmallIcon(R.drawable.ic_notification);
                } else {
                    builder.setSmallIcon(R.drawable.notification);
                }
                NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                manager.notify(1,builder.build());
            }
}

Большая картинка такжене показыватьПожалуйста, помогите.

РЕДАКТИРОВАТЬ:

Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.test);

    String channelId = getString(R.string.default_notification_channel_id);

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

    if (remoteMessage.getData().size() > 0) {
        String title = remoteMessage.getData().get("title");
        String text = remoteMessage.getData().get("body");

        builder.setContentTitle(title)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentText(text)
                .setLargeIcon(icon)
                .setPriority(Notification.PRIORITY_MAX)
                .setStyle(new NotificationCompat.BigPictureStyle()
                        .bigLargeIcon(icon));

    } else if (remoteMessage.getNotification() != null) {
        String title = remoteMessage.getNotification().getTitle();
        String text = remoteMessage.getNotification().getBody();

        builder.setContentTitle(title)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentText(text)
                .setLargeIcon(icon)
                .setPriority(Notification.PRIORITY_MAX)
                .setStyle(new NotificationCompat.BigPictureStyle()
                        .bigLargeIcon(icon));

    }

    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

        NotificationChannel notificationChannel = new NotificationChannel(channelId, "Testing channel", NotificationManager.IMPORTANCE_DEFAULT);
        manager.createNotificationChannel(notificationChannel);

    }
    manager.notify(1, builder.build());

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Попробуйте удалить и переустановить 100% свежее приложение.Android хранит кэш, поэтому все работает быстрее, и уведомления - одна из тех вещей.

Удаление и переустановка работали для моей проблемы некоторое время назад.

Также помните, что в Android Oreo и выше,для того, чтобы уведомления работали;Каналы уведомлений должны быть созданы, а также одному из них должно быть назначено создаваемое вами уведомление.

РЕДАКТИРОВАТЬ

То, что я пробовал (и оно работает для меня): (Примерв Kotlin, но должно быть достаточно похоже);

fun onClick(view: View) {
    var icon_resource = R.drawable.ic_mtrl_chip_close_circle
    if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
        icon_resource = R.drawable.ic_mtrl_chip_checked_circle
    }

    val icon = BitmapFactory.decodeResource(resources,R.mipmap.ic_launcher_round)

    val notification =  NotificationCompat.Builder(this)
        .setSmallIcon(icon_resource)
        .setContentTitle("New Book Added")
        .setContentText("Android with java")
        .setLargeIcon(icon)
        .setStyle(NotificationCompat.BigPictureStyle()
            .bigPicture(icon)
            .bigLargeIcon(null)).build()

   val manager=  getSystemService(NOTIFICATION_SERVICE) as NotificationManager
   manager.notify(1,notification)
}

ВТОРОЕ РЕДАКТИРОВАНИЕ

Я думаю, что есть проблема с вашим изображением (как было в моем; размеры или что-то в этом роде).Потратив много времени, пытаясь выяснить, почему на уведомлениях не отображается значок запуска, я решил попробовать с одним из моих изображений, которые я лежал вокруг ...

Протестировано с Android O;API 28

И вот результаты:

Collapsed Expanded

Не стесняйтесь попробовать сисходное изображение, которое я использовал: WTF_Gopher

Вот код, который обеспечивает эти результаты;это не очень отличается от первого ...

// Parametherise this drawable with an if statement of your own
var icon_resource = R.drawable.ic_mtrl_chip_close_circle

val manager=  NotificationManagerCompat.from(this)
// This is required because the testing device is an Android O
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    manager.createNotificationChannel(
        NotificationChannel("CUSTOM_NOTIFICATIONS", "StackOverflow", NotificationManager.IMPORTANCE_HIGH)
    )
}

val icon = BitmapFactory.decodeResource(resources,R.mipmap.dafuq)

val notification =  NotificationCompat.Builder(this, "CUSTOM_NOTIFICATIONS")
    .setSmallIcon(icon_resource)
    .setContentTitle("New Book Added")
    .setContentText("Android with java")
    .setLargeIcon(icon)
    .setStyle(NotificationCompat.BigPictureStyle()
        .bigPicture(icon)
        .bigLargeIcon(null)).build()

manager.notify(1,notification)

Дополнительная информация:

Когда я использую неправильное изображение, я получаю этот противный журнал в моем Logcat.Проверьте на то же или подобное!2019-04-10 20:11:02.120 3434-3434/com.example.deletemeapp D/skia: --- Failed to create image decoder with message 'unimplemented'

0 голосов
/ 10 апреля 2019

Что вы хотите сделать, это создать значок уведомления следующим образом:

        NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this)
                .setContentTitle("New Book Added")
                .setContentText("Android with java");

Теперь добавьте:

        NotificationCompat.BigPictureStyle s = new NotificationCompat.BigPictureStyle().bigPicture(bitmap_image);
        s.setSummaryText("Summary text appears on expanding the notification");
        //Set the style of the notification to this big picture style
        builder.setStyle(s);

Для управления версиями добавьте следующее:

 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
       // Marshmallow+
   }else{
        //below Marshmallow
}

Надеюсь, это поможет:)

...