13
 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,但结果是根本没有显示通知!

4

6 回答 6

17

在 Jelly Bean 及更高版本上,您可以使用nbuilder.setPriority(Notification.PRIORITY_MIN); 此优先级的确切解释由系统 UI 决定,但在 AOSP 中,这会导致通知图标被隐藏。

这适用于不需要引起用户注意的“环境”或“背景”信息,但如果用户碰巧在通知面板周围闲逛,她可能会感兴趣。有关如何最好地使用通知优先级的更多信息,请参阅Android 设计网站的通知部分。

于 2013-04-24T13:20:49.047 回答
9

更新:不要在 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.contentView != 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);
  }
}

我找不到更好的方法。

当他们更改视图的 id 或更改 Notification 中的任何 RemoteViews 字段时,这可能会停止工作,因此使用风险自负。

于 2015-11-26T16:29:31.903 回答
3

你不能那样做......没有setSmallIcon(icon,level.level);通知不显示......

于 2013-04-23T13:35:43.703 回答
0

尝试在您的通知生成器中添加此行
.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();
所以在这种情况下,您可以在通知栏中看到您的图标,并且它隐藏在状态栏中。希望这有帮助。

于 2016-11-16T21:08:48.957 回答
0

您可以设置自己的无图标布局:

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

于 2016-09-19T04:44:11.027 回答
0

我之前遇到过这个问题并像这样解决了它:

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());
于 2016-11-16T21:26:24.297 回答