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?¿Cómo mostrar un ícono en la barra de estado cuando la aplicación se está ejecutando, incluso en segundo plano?
Respuesta
Usted debe ser capaz de hacer esto con la Notificación y la NotificationManager. Sin embargo, obtener una forma garantizada de saber cuándo su aplicación no se está ejecutando es la parte difícil.
, usted 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 algún lugar en el que está seguro va a ser despedido cuando se inicia la aplicación. Posiblemente en el método onCreate() del Objeto de aplicación personalizado de su aplicación.
Sin embargo, después de eso las cosas son complicadas. La muerte de la aplicación puede suceder en cualquier momento. Así que puedes intentar poner algo en el onTerminate() de la clase Application también, pero no se garantiza que se invoque.
((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(1);
será lo que se necesita para eliminar el ícono.
Eche un vistazo a la Guía de desarrollo "Creating Status Bar Notifications".
Una forma de lograr el objetivo de mantener el icono no sólo cuando se ejecuta la aplicación es inicializar la notificación en onCreate()
y llamar a su método de cancel(int)
en onPause()
sólo si isFinishing()
vuelve verdadera.
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);
}
}
Esto solo le mostrará si una determinada actividad se está ejecutando. No si la aplicación aún se está ejecutando. –
@Greg: Correcto, este código de ejemplo solo maneja correctamente una aplicación de una actividad. Es mucho más difícil determinar cuándo el sistema ha matado a la aplicación. Como mencionaste, una clase 'Application' personalizada es probablemente el mejor lugar para el código ya que persiste durante toda la vida de la aplicación. La eliminación de la notificación será difícil porque el sistema puede decidir arbitrariamente matar el proceso de una aplicación en condiciones de poca memoria. Puede intentar crear un servicio para supervisar el estado ya que el sistema intentará reiniciar el servicio más tarde cuando haya más memoria disponible. – Brian
Si elimina 'notificationManager.cancel (NOTIFICATION_EX);' from 'onPause', la notificación permanecerá en la barra de notificaciones hasta que la aplicación se haya detenido por completo. –
Para la nueva API que puede utilizar 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á el tiempo que su aplicación se está ejecutando y alguien cierra manualmente su aplicación. Siempre puede cancelar su notificación llamando al
mNotifyMgr.cancel(NOTIFICATION_ID);
lo que hará ser el contenido de MyActivity.class? @mjosh –
@Sarahcartenz Todo lo que quieras realmente – mjosh
¿Qué sucede si no defino una clase así? o mantenerlo vacío. No quiero una acción una vez que se presiona la notificación, por ejemplo. –
Realmente funciona. I creó un método 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);}
Debería ser llamado como: applyStatusBar ("Test de estado", 10);
si puedo preguntar, ¿cuál será el contenido de ActMain.class? –
- 1. Mostrar un icono en la barra de estado cuando se está ejecutando mi tarea
- 2. No obtengo didReceiveMemoryWarning cuando la aplicación está en segundo plano
- 3. iPhone: cómo configurar la insignia de la aplicación, cuando la aplicación está cerrada/en segundo plano?
- 4. ¿Cómo crear una barra de estado de "regresar a la aplicación" cuando la aplicación pasa al segundo plano?
- 5. ¿Cómo puedo seguir ejecutando un programa Unix en segundo plano incluso si cierro la sesión?
- 6. Cómo responder a la notificación de inserción ver si la aplicación ya se está ejecutando en segundo plano
- 7. OSX: ¿Cómo "mostrar" un elemento de la barra de estado?
- 8. Ejecutando archivo por lotes en segundo plano cuando Windows inicia
- 9. WP7: Editar captura de pantalla mientras la aplicación está en segundo plano (Mango)
- 10. Comprueba si la aplicación iOS está en segundo plano
- 11. cómo ejecutar mi aplicación en segundo plano en iphone?
- 12. Android: mostrar/ocultar la barra de estado/barra de estado
- 13. Aplicación que se ejecuta en segundo plano
- 14. ¿Captura la salida visual de una aplicación DirectX, incluso en segundo plano?
- 15. ¿Quieres ocultar toast de Android cuando la aplicación está en segundo plano?
- 16. Enviar pulsaciones de teclas a un programa incluso si está en segundo plano usando C#
- 17. Actualizaciones de ubicación cuando la aplicación está en segundo plano o suspendida
- 18. ¿Puedo detectar cuándo un subproceso en segundo plano es eliminado por la aplicación cuando se cierra la aplicación?
- 19. cómo ejecutar la aplicación en segundo plano en android?
- 20. cómo ejecutar la aplicación android phonegap en segundo plano (después de cerrar la aplicación)?
- 21. La aplicación Windows Phone 7 (Mango) se desconecta cuando se pone en segundo plano?
- 22. ios: bloquea los bloques en segundo plano y se ejecuta cuando la red está disponible
- 23. ¿Cómo detener el audio HTML5 cuando la aplicación iOS iOS iPhone se pone en segundo plano?
- 24. ¿Cómo obtener un notificador de aplicación PERMANENTE en la barra de estado?
- 25. ¿Cómo mantener un servicio ejecutándose en segundo plano incluso después de que el usuario abandona la aplicación?
- 26. Rieles: falla de segmentación en Rjb cuando está en proceso en segundo plano, ¿funciona bien cuando no está en segundo plano?
- 27. Cuando la aplicación se pone en segundo plano durante una ejecución de AsyncTask, ¿qué debería hacer?
- 28. Solicitando la ubicación del iPhone mientras está en segundo plano?
- 29. ¿Cómo obtengo la barra de navegación en un UINavigationController para actualizar su posición cuando la barra de estado está oculta?
- 30. Reproducir sonido en un momento específico mientras la aplicación está en segundo plano
'Notificación 'ha quedado obsoleto en el nivel 11 de API. Use Notification.Builder en su lugar. –
Si usa además 'Servicio', no tiene que eliminar manualmente la notificación.Cuando se detiene el servicio, la notificación se eliminará automáticamente. ("Sin embargo, si detiene el servicio mientras se está ejecutando en primer plano, también se eliminará la notificación." Https://developer.android.com/guide/components/services.html#Foreground) –