java android push-notification android-service android-8.0-oreo

java - Servicio en segundo plano para Android Oreo



push-notification android-service (3)

¿Cómo continuar el servicio en segundo plano en Android Oreo sin mostrar el punto de notificación? Continúo mi servicio en segundo plano utilizando la notificación, pero no quiero mostrar notificaciones para ejecutar el servicio.


Este código me funcionó. Primero asegúrate de:

1- Definir el servicio en Manifiesto

2- Definir el permiso en Manifiesto

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

3- Asegúrese de haber comenzado el servicio antes.

Su servicio debe tener una notificación. ¡Debe tener cuidado de que su notificación debe tener un ChannelID!

Esta página puede ayudarte:

¿Cómo crear un diseño de notificación personalizado en Android?

Android cómo mostrar notificaciones en pantalla

Ahora pegue el siguiente código en su servicio

@Override public void onCreate() { super.onCreate(); try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForeground(" your Notification ID ", notification); } } catch (Exception e) { Log.e(" Error --->> ", e.getMessage()); } }

después de eso agregue este código:

@Override public ComponentName startForegroundService(Intent service) { return super.startForegroundService(service); }

y esto:

@Override public void onDestroy() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { stopForeground(true); } }


Esto no es posible en esta API version (26) y superior. El sistema operativo Android cierra automáticamente su servicio si lo ejecuta sin mostrar una notificación al usuario.

Si está apuntando a API >= 26 el sistema impondrá una restricción en su servicio para ejecutarse en segundo plano a menos que su actividad esté en primer plano. Tan pronto como su actividad pase a segundo plano, el servicio finalizará cuando el sistema lo encuentre ejecutándose en segundo plano (consulte las limitaciones del servicio en segundo plano ).

Al usar el método startForegroundService() , otorga ese permiso para ejecutar el servicio en segundo plano incluso cuando la actividad no se está ejecutando. También una vez que se ha creado el servicio, el servicio debe llamar a su método startForeground() dentro de los cinco segundos.


Si hubiera leído la documentación de Android Oreo 8.0 correctamente en algún lugar here , es posible que no haya publicado esta pregunta aquí.

Paso 1: asegúrese de iniciar un servicio como un Service primer plano como se indica en el siguiente código

ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), GpsServices.class)); ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), BluetoothService.class)); ContextCompat.startForegroundService(mainActivity, new Intent(getContext(), BackgroundApiService.class));

Paso 2: use la notificación para mostrar que su servicio se está ejecutando. Agregue la siguiente línea de código en el método de Service onCreate .

@Override public void onCreate() { ... if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForeground(NOTIFICATION_ID, notification); } ... }

Paso 3: elimine la notification cuando el servicio se detenga o se destruya.

@Override public void onDestroy() { ... if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { stopForeground(true); //true will remove notification } ... }

Un problema con esta solución es que seguirá mostrando la notification hasta que su Service se ejecute en todos los dispositivos con Android Oreo 8.0 .

Estoy seguro de que esta solución funcionará incluso cuando la aplicación esté en segundo plano o en estado inactivo.

NOTA IMPORTANTE: MOSTRAR UNA NOTIFICACIÓN PARA EJECUTAR UN SERVICIO EN FONDO (APLICACIÓN EN FONDO O ESTADO ASESINADO) ES OBLIGATORIO EN ANDROID OREO 8.0. NO PUEDES CORRER LEJOS CON ÉL. ASÍ QUE SE RECOMIENDA QUE HAGA LOS CAMBIOS NECESARIOS EN SU APLICACIÓN PARA QUE FUNCIONE CORRECTAMENTE SEGÚN LAS MEJORES PRÁCTICAS SEGUIDAS O PEDIDAS POR ANDROID.

Espero que esto pueda ayudar a resolver su problema.