Android AlarmManager no funciona en algunos dispositivos cuando la aplicación está cerrada

Estoy intentando ejecutar IntentService como tal desde AlarmManager setRepeating() por cada media hora. Deseo enviar una para transmitir, desde el elenco general al servicio intencionado. En el servicio, se realizará alguna funcionalidad.

Pero, inicialmente, el AlarmManager no se dispara mientras la aplicación está en estado cerrado.

Cuando mi aplicación se está ejecutando o está en segundo plano, la alarma funciona bien y cuando cierro la aplicación, la alarma no funciona en algunos dispositivos .

¿Qué debo hacer para ejecutar la alarma incluso si la aplicación está cerrada?

De la documentación de setRepeating() :

A partir de la API 19, todas las alarmas repetitivas son inexactas.

Además, setRepeating() no funciona con Doze .

Debe usar alarmas exactas (configuradas por el método apropiado AlarmManager según el nivel API del dispositivo):

 if (Build.VERSION.SDK_INT >= 23) { alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); } else if (Build.VERSION.SDK_INT >= 19) { alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); } else { alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); } 

Y reprogtwigrlos cada vez que disparan.

Para la reprogtwigción, puede agregar el tiempo de activación original a la Intent :

 intent.putExtra(KEY_TRIGGER_TIME, triggerTime); 

Luego recupere este extra en onReceive() , agregue su intervalo deseado y reprograme la alarma usando el nuevo valor:

 @Override public void onReceive(Context context, Intent intent) { long triggerTime = intent.getLongExtra(KEY_TRIGGER_TIME, 0); // adding one day to the current trigger time triggerTime += TimeUnit.DAYS.toMillis(1); // set a new alarm using the new trigger time // ... } 

NOTA: Como @Opiatefuchs mencionado en el comentario anterior, algunos fabricantes (como Xiaomi o Huawei) pueden implementar ciertas funciones de ahorro de batería que pueden evitar que se disparen las alarmas y que no se puedan omitir programáticamente.

Ahora los dispositivos vienen con más seguridad en el contexto del consumo de energía de la batería. Por defecto, el dispositivo mantiene casi todas las aplicaciones en modo de ahorro de energía. Significa que en algunos dispositivos su trabajo de fondo (Ubicación, Administrador de alarmas) no funcionará tan pronto como salga de la aplicación; en algunos dispositivos, las tareas en segundo plano no funcionarán después de un límite de umbral de la batería (como 13%). Por lo tanto, debe mantener su aplicación fuera de este modo de ahorro de batería para ejecutar su aplicación sin problemas incluso en segundo plano. Puede hacer esto para diferentes fabricantes como …

1. Para Xioami

-> Ir a la batería -> Energía -> Ahorro de batería de la aplicación -> su aplicación Ahora seleccione Sin restricciones (para la configuración de Fondo) luego la opción Permitir para Ubicación de fondo

-> Para iniciar automáticamente tu aplicación después del arranque -> Ve a la aplicación de seguridad -> permisos -> Inicio automático y revisa tu aplicación

2. Para Samsung

– >> La aplicación Samsung Smart Manager se usa para detener todo el trabajo en segundo plano después de 3 días si no vienes a tu aplicación. Así que desactive esta función para su aplicación Vaya a la aplicación -> Batería -> Detalle (panal de ahorro de energía de la aplicación) -> haga clic en su aplicación y seleccione deshabilitar

Para otros dispositivos, debe haber las mismas opciones de energía ya sea en la opción de configuración directamente o en alguna aplicación para manejarlo.

El comportamiento a continuación cambió después de una carga completa. Anteriormente, después de deshabilitar el ahorro de energía para esta aplicación, mostraba que no había ahorro de batería activo, etc., pero solo después de una carga completa (desde un estado de batería muy bajo) el dispositivo se comportó como debería. Así que cambie esas configuraciones para la aplicación, luego haga una recarga completa (tal vez solo después de haber tenido poca batería). Esto podría solucionarlo.


ZTE Blade L110

Incluso con el ahorro de batería desactivado (Configuración -> Batería -> Opciones -> Ahorro de batería) y la aplicación marcada como importante para los mensajes (Configuración -> Aviso y notificación -> Notificaciones de la aplicación -> nombre de la aplicación -> Prioridad), parece que ni setExact ni setAlarmClock se activan a tiempo.

para el teléfono Lenovo: –

necesita ir en configuración -> aplicación -> seleccionar aplicación -> desmarcar Restringir para iniciar

ahora será trabajo en el fondo como estado muerto