Icono de servicio persistente en la barra de notificaciones

Estoy tratando de averiguar cómo mostrar que mi servicio se está ejecutando con un icono de notificación persistente. Muchos ejemplos que he encontrado sólo envían un mensaje descartable a la barra de notificación. Quisiera un icono persistente que cuando usted tira abajo de la barra de la notificación demuestra que el servicio está funcionando y usted puede chascarlo para abrir la aplicación para cerrar el servicio abajo.

¿Puede alguien apuntarme a recursos o tutorial sobre cómo lograr esto cualquier APK está bien, pero me gustaría trabajar con 4.0 y superior.

Gracias.

Debe ser el mismo que un mensaje descartable excepto que cambie la Bandera.

Notification.FLAG_ONGOING_EVENT

en lugar de

Notification.FLAG_AUTO_CANCEL

Cuando se hace clic en una notificación, se ejecuta la intención que envía, por lo que debe asegurarse de que Actividad realice la tarea que desee.

private void showRecordingNotification(){ Notification not = new Notification(R.drawable.icon, "Application started", System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, main.class), Notification.FLAG_ONGOING_EVENT); not.flags = Notification.FLAG_ONGOING_EVENT; not.setLatestEventInfo(this, "Application Name", "Application Description", contentIntent); mNotificationManager.notify(1, not); } 

Sé que esto es una vieja pregunta, pero era primero en una página de los resultados de Google así que agregaré la información para ayudar a otros.

Notificaciones persistentes

El truco es añadir .setOngoing a su NotificationCompat.Builder

Botón Cerrar

Un botón que abre la aplicación y cierra el servicio requiere un PendingIntent

Un ejemplo

Este ejemplo muestra una notificación persistente con un botón de cierre que sale de la aplicación.

MyService :

 private static final int NOTIFICATION = 1; public static final String CLOSE_ACTION = "close"; @Nullable private NotificationManager mNotificationManager = null; private final NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder(this); private void setupNotifications() { //called in onCreate() if (mNotificationManager == null) { mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); } PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class) .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); PendingIntent pendingCloseIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class) .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP) .setAction(CLOSE_ACTION), 0); mNotificationBuilder .setSmallIcon(R.drawable.ic_notification) .setCategory(NotificationCompat.CATEGORY_SERVICE) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentTitle(getText(R.string.app_name)) .setWhen(System.currentTimeMillis()) .setContentIntent(pendingIntent) .addAction(android.R.drawable.ic_menu_close_clear_cancel, getString(R.string.action_exit), pendingCloseIntent) .setOngoing(true); } private void showNotification() { mNotificationBuilder .setTicker(getText(R.string.service_connected)) .setContentText(getText(R.string.service_connected)); if (mNotificationManager != null) { mNotificationManager.notify(NOTIFICATION, mNotificationBuilder.build()); } } 

MainActivity debe manejar las intenciones cercanas.

 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String action = intent.getAction(); if (action == null) { return; } switch (action) { case MyService.CLOSE_ACTION: exit(); break; } } private void exit() { stopService(new Intent(this, MyService.class)); finish(); } 

AnotherActivity debe ser finalizar y enviar una intención de salida a MainActivity

 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String action = intent.getAction(); if (action == null) { return; } switch (action) { case MyService.CLOSE_ACTION: exit(); break; } } /** * Stops started services and exits the application. */ private void exit() { Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setAction(Stn1110Service.CLOSE_ACTION); startActivity(intent); } 

¿Puede alguien apuntarme a recursos o tutorial

http://developer.android.com/training/notify-user/build-notification.html

  • El servicio no se reinicia después de que "Clear Memory" + appWidget se bloquea
  • Uso de Alarmmanager para iniciar un servicio en un momento específico
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () en CountDownTimer
  • Android Service.startForeground NO respeta la id unicidad de notificación
  • ¿Cómo comprobar el permiso automático de MIUI mediante programación?
  • ¿Cómo reiniciar automáticamente un servicio incluso si la fuerza del usuario lo cierra?
  • El servicio de Android solo se inicia en modo de depuración
  • Servicio de Android que no recibe Actualizaciones de ubicación
  • IOS equivalente al servicio de Android?
  • Iniciar el servicio en el arranque, pero no toda la aplicación de Android
  • "No se puede realizar esta acción en una instancia no sellada" excepción java.lang.IllegalStateException
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.