studio notificaciones navegacion modificar iconos icono estado cambiar boton barra bar agregar android icons statusbar uistatusbar

notificaciones - menu overflow android studio



¿Cómo mostrar un icono en la barra de estado cuando la aplicación se está ejecutando, incluso en el fondo? (4)

Quiero poner un icono en la barra de estado cuando mi aplicación se esté ejecutando, incluso cuando se ejecuta en segundo plano. ¿Cómo puedo hacer esto?


Debería poder hacer esto con Notification y el NotificationManager. Sin embargo, obtener una forma garantizada de saber cuándo su aplicación no se está ejecutando es la parte difícil.

Puede obtener la funcionalidad básica de lo que está deseando haciendo algo como:

Notification notification = new Notification(R.drawable.your_app_icon, R.string.name_of_your_app, System.currentTimeMillis()); notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; NotificationManager notifier = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notifier.notify(1, notification);

Este código debe estar en un lugar donde esté seguro de que se activará cuando se inicie la aplicación. Posiblemente en el método onCreate () del objeto Application personalizado de su aplicación.

Sin embargo, después de eso las cosas son difíciles. El asesinato de la aplicación puede ocurrir en cualquier momento. Por lo tanto, también puede intentar poner algo en el término () de la clase Aplicación, pero no está garantizado que se llame.

((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(1);

Será lo que se necesite para eliminar el icono.


Eche un vistazo a la Guía de desarrollo " Creación de notificaciones de la barra de estado ".

Una forma de lograr el objetivo de mantener el ícono allí solo cuando la aplicación se está ejecutando es inicializar la notificación en onCreate() y cancel(int) llamada cancel(int) en su método onPause() solo si isFinishing() devuelve true.

Un ejemplo:

private static final int NOTIFICATION_EX = 1; private NotificationManager notificationManager; @Override public void onCreate() { super.onCreate(); notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); int icon = R.drawable.notification_icon; CharSequence tickerText = "Hello"; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); Context context = getApplicationContext(); CharSequence contentTitle = "My notification"; CharSequence contentText = "Hello World!"; Intent notificationIntent = new Intent(this, MyClass.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); notificationManager.notify(NOTIFICATION_EX, notification); } @Override protected void onPause() { super.onPause(); if (isFinishing()) { notificationManager.cancel(NOTIFICATION_EX); } }


Para la nueva API puede usar NotificationCompat.Builder -

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("Title"); Intent resultIntent = new Intent(this, MyActivity.class); PendingIntent resultPendingIntent = PendingIntent.getActivity( this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); Notification notification = mBuilder.build(); notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); mNotifyMgr.notify(NOTIFICATION_ID, notification);

Se mostrará mientras su aplicación se esté ejecutando y alguien cierre manualmente su aplicación. Siempre puede cancelar su notificación llamando al

mNotifyMgr.cancel(NOTIFICATION_ID);


Realmente funciona. Creé un método a partir del ejemplo anterior:

private void applyStatusBar(String iconTitle, int notificationId) { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(iconTitle); Intent resultIntent = new Intent(this, ActMain.class); PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); Notification notification = mBuilder.build(); notification.flags |= Notification.FLAG_NO_CLEAR|Notification.FLAG_ONGOING_EVENT; NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); mNotifyMgr.notify(notificationId, notification);}

Debe llamarse como: applyStatusBar ("Statusbar Test", 10);