2013-04-23 12 views
12
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); 

Come nascondere o eliminare completamente SmallIcon? Ho provato a non usare nbuilder.setSmallIcon, ma il risultato è che la notifica non è mostrata affatto!Notifica Android.Builder: mostra una notifica senza icona

+4

unico modo che conosco è quello di utilizzare un'immagine trasparente per l'icona, e quindi impostare l'ordine delle notifiche in modo che il tuo sia l'ultimo (più a destra) che lo farà apparire all'utente come se non ci fosse un'icona. – FoamyGuy

+3

Perché è nell'interesse dell'utente? – CommonsWare

+0

@CommonsWare: un caso di utilizzo: un'app di comunicazione in esecuzione invisibile vuole che l'utente sappia quando arriva un messaggio, ma non vuole mostrare icone di app o icone in modo che gli altri non possano vedere. –

risposta

3

non si può fare che ... senza setSmallIcon(icon,level.level); notifica non sta mostrando ..

17

Su Jelly Bean e poi si può usare nbuilder.setPriority(Notification.PRIORITY_MIN); l'interpretazione esatta di questo livello di priorità è lasciata all'interfaccia utente del sistema, ma in AOSP questo fa sì che l'icona della notifica sia nascosta.

Questo è inteso per informazioni "ambient" o "background" che non richiedono l'attenzione dell'utente, ma se l'utente sta curiosando nel pannello delle notifiche, potrebbe essere interessata. Consulta lo Notifications section of the Android Design site per ulteriori informazioni su come utilizzare al meglio la priorità di notifica.

9

Update: non lo uso su Android 7, è schiantarsi


utilizzando la riflessione, ecco qualcosa che sta lavorando a Lollipop (emulatori e Moto G dispositivo) e Marshmallow (emulatore)

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

Non sono riuscito a trovare un modo migliore.

Questo può smettere di funzionare nel momento in cui cambia l'id della vista o altera qualsiasi campo di RemoteViews all'interno della notifica, quindi utilizzarlo a proprio rischio.

0

È possibile impostare il proprio layout senza icona:

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

0

Prova nel vostro costruttore di notifica aggiungendo questa linea
.setPriority(Notification.PRIORITY_MIN)
Quindi la tua notifica verrà in questo modo:
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();
Quindi, in questo caso è possibile vedere l'icona nella barra di notifica e nascondersi nella barra di stato. spero che questo aiuto.

0

Ho affrontato questo problema prima e risolto così:

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; 
} 

e basta chiamare questa funzione in setSmallIcon()

nbuilder.setSmallIcon(getNotificationIcon()); 
Problemi correlati