Android Notification.Builder: показать уведомление без значка

 String ns = Context.NOTIFICATION_SERVICE;
 NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

 int icon = R.drawable.ic_notification_icon;
 android.app.Notification.Builder nbuilder = new Notification.Builder(this);

 nbuilder.setContentTitle(getString(R.string.notifcation_title,mProfile.mName));
 nbuilder.setContentText(msg);
 nbuilder.setOnlyAlertOnce(true);
 nbuilder.setOngoing(true);
 nbuilder.setSmallIcon(icon,level.level);

Как я могу скрыть или полностью удалить smallIcon? Я пытался не использовать nbuilder.setSmallIcon, но результат заключается в том, что уведомление вообще не отображается!

Ответ 1

На желе Bean, а затем вы можете использовать nbuilder.setPriority(Notification.PRIORITY_MIN); точная интерпретация этого уровня приоритета остается до пользовательского интерфейса системы, но в AOSP это приводит к скрытию значка уведомления.

Это предназначено для "эмбиентной" или "фоновой" информации, которая не нуждается в привлечении внимания пользователя, но если пользователь случайно соскальзывает вокруг панели уведомлений, она может быть заинтересована. Подробнее о том, как наилучшим образом использовать приоритет уведомлений, см. В разделе Уведомления на сайте Android Design.

Ответ 2

Обновление: не используйте его на Android 7, он сбой


Используя отражение, здесь что-то, что работает в Lollipop (эмуляторы и устройство Moto G) и Marshmallow (эмулятор)

Notification notification = NotificationCompat.Builder.blabla().build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  int smallIconViewId = context.getResources().getIdentifier("right_icon", "id", android.R.class.getPackage().getName());

  if (smallIconViewId != 0) {
    if (notification.contentIntent != null)
      notification.contentView.setViewVisibility(smallIconViewId, View.INVISIBLE);

    if (notification.headsUpContentView != null)
      notification.headsUpContentView.setViewVisibility(smallIconViewId, View.INVISIBLE);

    if (notification.bigContentView != null)
      notification.bigContentView.setViewVisibility(smallIconViewId, View.INVISIBLE);
  }
}

Я не мог найти лучшего способа.

Это может прекратить работу в тот момент, когда они изменяют идентификатор представления или изменяют любое из полей RemoteViews внутри Уведомления, поэтому используйте на свой страх и риск.

Ответ 3

вы не можете этого сделать... без setSmallIcon(icon,level.level); Уведомление не отображается.

Ответ 4

Вы можете настроить свой собственный макет без значка:

RemoteViews notificationView = new RemoteViews( context.getPackageName(), R.layout.notify ); NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setContent(notificationView)

Ответ 5

Попробуйте добавить в построитель уведомлений эту строку
.setPriority(Notification.PRIORITY_MIN)
Итак, ваше уведомление будет таким:
Notification notification = new Notification.Builder(this) .setSmallIcon(R.drawable.stat_notify_chat) .setContentTitle("my app") .setContentText("my app ") .setPriority(Notification.PRIORITY_MIN) .setContentIntent(pendingIntent).build();
Таким образом, в этом случае вы можете увидеть свой значок только в панели уведомлений, и он будет скрываться в строке состояния. надеюсь эта помощь.

Ответ 6

Я столкнулся с этой проблемой раньше и решил ее так:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP);
    // LOLLIPOP or Marshmellew>>>>>>>>>>>>>>>>>>>>> KitKat or Less
    return useWhiteIcon ? R.drawable.logo_new : R.drawable.logo;
}

и просто вызовите эту функцию в setSmallIcon()

nbuilder.setSmallIcon(getNotificationIcon());