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());