Как отобразить четкое фоновое изображение в уведомлении Android Wear?

Насколько я понимаю, есть два способа установить фоновое изображение для уведомления в Android Wear. Для справки, оба начинаются с:

   Bitmap bitmap;
   Notification.Builder bob = new Notification.Builder(this)
            .setContentTitle(title)

...и так далее, чтобы настроить уведомление. Также предположим, что bitmap был инициализирован изображением соответствующего размера (хотя это уже другая проблема).

Способ 1:

   bob.setLargeIcon(bitmap);

Это работает, но AFAICT bitmap всегда размыт на фоне уведомления, независимо от его размера.

Способ 2:

   bob.setStyle(new Notification.BigPictureStyle().bigPicture(bitmap));

Это очищает растровое изображение, но имеет неприятный побочный эффект вставки дополнительной «страницы» на носимом устройстве, страницы, которая пуста, за исключением растрового изображения. Я полагаю, здесь речь идет о том, что вы пытаетесь показать изображение пользователю, но я этого не делаю, мне просто нужен не размытый фон.

Есть ли способ сделать это?


person String    schedule 19.07.2014    source источник


Ответы (1)


Используйте метод setBackground(Bitmap) из WearableExtender вместо setLargeIcon(Bitmap). Он установит растровое изображение фона, которое не будет размыто.

Notification.Builder wearableBuilder = new Notification.Builder(context)
    ...
    .extend(new WearableExtender().setBackground(bitmap));
person Maciej Ciemięga    schedule 19.07.2014
comment
Идеальный! Для справки в будущем, если вы также хотите использовать setLargeIcon(), это, похоже, отключит его... но вы можете получить эквивалентную функциональность, вызвав вместо этого WearableExtender.setContentIcon(). - person String; 20.07.2014
comment
да, setBackground() заменит размытый фон setLargeIcon() на носимых устройствах. Так что, если ваш setLargeIcon() является каким-то контактным изображением или другим подобным изображением - просто используйте setBackground и не нужно ничего добавлять. Но если у вас есть какая-то информативная иконка, описывающая ваш контент — вы можете добавить ее в setContentIcon:) Бонус: Если вы хотите сделать свое уведомление кликабельным на Android Wear, вы можете назначить ему действие. Метод setContentAction(int) на WearableExtender объединит данное действие в карточку + значок этого действия будет показан вместо contentIcon. - person Maciej Ciemięga; 20.07.2014
comment
setBackground() все еще размыто, только меньше. Изображение обрезается до квадрата, затем масштабируется до 400x400, если оно больше, а затем растягивается, чтобы каждая сторона экрана выступала на 20% размера экрана. Математика означает размытие фонового изображения для часов с экраном больше 285x285. - person Karu; 10.12.2014