AlarmManager no funciona en varios dispositivos

Mi aplicación utiliza AlarmManager y ha estado funcionando desde hace 4 años. Pero me di cuenta de que comenzó a fallar en algunos dispositivos.

Estoy bastante seguro de que el código es correcto (estoy usando WakefulBroadcastReceiver, y setExactAndAllowWhileIdle para los dispositivos con Doze) porque está funcionando perfectamente en dispositivos Nexus, pero falla en los dispositivos de algunos fabricantes (Huawei, Xiaomi …).

Los dispositivos Huawei, por ejemplo, tienen un tipo de administrador de baterías que mata las aplicaciones, y cuando se cancela una aplicación, las alarmas programadas se cancelan. Así que configurar una aplicación como "protegida" en el administrador de baterías de Huawei resuelve el problema.

Pero recientemente me di cuenta de que no está funcionando con más dispositivos: Xiaomi, Samsung (tal vez está relacionado con el nuevo "Smart Manager"?) … Parece que este comportamiento se está convirtiendo en un estándar: matar las aplicaciones de fondo.

¿Alguien sabe algo al respecto? ¿Hay alguna manera de asegurar que se dispare la alarma?

El problema es Smart Manager. Samsung tiene un administrador de batería que a veces desactiva determinadas aplicaciones de correr en segundo plano. Trató de "reanudar" cuando se vuelve a la aplicación, pero desactiva completamente la aplicación o puede reanudar cada 5 minutos o así (dependiendo de cómo Samsung lo tiene).

Esto funcionaría en las versiones de stock de Android, ya que no hay Samsung Manager. También puede instalar la versión personalizada de Android que tiene algunas características para habilitar SM (dependiendo de la ROM).

Estoy tratando de resolverlo varias semanas. No encontré nada. Huawei acaba de matar todas las alarmas después de algún tiempo. Si pongo la aplicación a la aplicación protegida en su protector de batería no ayuda. Pero si cambio el nombre del paquete de mi aplicación para contener palabras como alarma, reloj o calendario, funciona absolutamente normal como en cualquier otro dispositivo. No entiendo cómo Google puede dar la certificación para esta mierda. Creo que el OEM no debe modificar la plataforma central de tal manera. Entiendo que tienen un protector de batería que destruye la aplicación después de algún tiempo, cuando el usuario no lo usa. Pero esta matanza también alerta de aplicaciones protegidas.

También setAlarmClock () para las alarmas de tiempo exactas ayuda. Pero no es posible usar esto para pensar como actualización de widget.

He dejado de usar AlarmManager hace un tiempo … una alternativa mejor y más estable

  1. Crear un servicio
  2. Registre un BroadcastReceiver para BOOT_COMPLETED
  3. Dispara tu servicio desde el receptor
  4. Iniciar un nuevo controlador dentro de su servicio que se encierran cada X minutos ( Android – ejecuta un método periódicamente usando la llamada postDelayed ( )
  5. Compruebe si ha llegado el tiempo para ejecutar la tarea: now – tiempo de ejecución> 0 ( ¿Cómo encontrar la duración de la diferencia entre dos fechas en java? )
  6. Si es así .. ejecutar la tarea y detener el manejador

Si .. es un dolor..pero el trabajo se hace NO IMPORTA QUE

¿Está escuchando BOOT_COMPLETED? Debe configurar las alarmas de nuevo cuando se reinicie un dispositivo.

También tengo una aplicación que establece alarmas. La solución es usar AlarmManager.setAlarmClock () en api> = 21. Esto no es afectado por doze afaik y tiene la ventaja añadida de poner un icono de despertador en la bandeja del sistema.

Utilice AlarmManager para dispositivos <5.0 y JobScheduler para dispositivos 5.0+. No puedo decir con seguridad que JobScheduler no será afectado por shenanigans fabricante, pero me parecería mucho menos probable, ya que Android está tratando de alejar a la gente de AlarmManager y en JobScheduler.

La mayoría de los nuevos teléfonos hoy en día se incluyen con algún tipo de batería / ahorro de energía de gestión que hacen lo mismo que usted ha descrito. Sin contar duboosters y maestros limpios.

Creo que necesitas poner una exención de responsabilidad o preguntas frecuentes en tu anuncio de app / play indicando que esta aplicación debe ser puesta en una excepción de tu aplicación de administrador de batería para que funcione correctamente.

¿Qué versión de Android están ejecutando estos dispositivos?

A partir de la API 23, el sistema operativo en sí entrará en un modo inactivo de baja potencia cuando no se haya utilizado durante un tiempo y, en ese modo, las alarmas no se entregarán. Hay una manera de que las aplicaciones digan explícitamente "necesito que esta alarma se apague en este momento independientemente del uso de la batería", sin embargo; Los nuevos métodos de AlarmManager llamados setAndAllowWhileIdle() y setExactAndAllowWhileIdle() .

De su descripción suena como esto podría no ser la causa particular de sus problemas en los dispositivos de ciertos fabricantes de equipos originales, pero esto es algo que todos los desarrolladores que utilizan el administrador de alarmas deben ser conscientes.

Por último, muchos usos del Administrador de alarmas se abordan mejor utilizando los mecanismos del Programador de trabajos. Para compatibilidad con versiones anteriores, los servicios de Play "GCM Network Manager" están realmente muy cerca del Job Scheduler en funcionalidad – usa el Job Scheduler internamente en versiones más recientes de Android – y no necesariamente sobre redes, a pesar del nombre de la clase.

No creo que la eliminación de la aplicación impida que el administrador de alarmas active su aplicación.

Es sólo cuando "fuerza de parada" o deshabilitar la aplicación que no reciben respaldos de la llamada del administrador de alarmas.

La causa raíz puede ser otra cosa.

También en M … setExactAndAllowWhileIdle hace el estrangulamiento … que es si u programar una alarma cada 2 minutos no será accionado. ..Tiene que ser 15 minutos ventana. .

Para Xiaomi es posible que necesites activar AutoStart para tu aplicación. Estoy tratando de hacer una lista de las modificaciones de Android (por lo general del fabricante del teléfono) que puede afectar a un proceso de fondo. Si tienes algo nuevo, por favor agrega una respuesta aquí Lista de asesinos de tareas de Android

Necesitamos habilitar nuestra aplicación en el gestor de inicio automático en el administrador de aplicaciones, algunos teléfonos como vivo v5,

In vivo v5, Podemos encontrar este menú en iManager -> Administrador de aplicaciones -> Administrador de inicio automático. Habilitar nuestra aplicación aquí.

Entonces su alarma / alarmmanager activará la alarma si la aplicación es matada o cerrada.

Estaba buscando una respuesta y después de varias horas encontré esto:

https://stackoverflow.com/a/35220476/3174791

En resumen, es posible saber si su aplicación ha sido eliminada por "Aplicaciones protegidas" y esto sólo funciona con los dispositivos Huawei. Hágamelo saber si hay alguna solución para otros dispositivos (Samsung, Sony, Xiaomi, etc).

  • ¿Cómo puedo configurar un administrador de alarmas para disparar cada día específico de la semana y el tiempo en android?
  • Android: Obtén todos los PendingIntents establecidos con AlarmManager
  • Android AlarmManager a veces se activa tarde si el teléfono se ejecuta en la batería
  • Android AlarmManager no despertar teléfono hasta
  • ¿Cómo configurar más de una alarma a la vez en android?
  • Android AlarmManager activa cada "ronda" 10 minutos
  • Comunicación de IntentService y AlarmManager
  • AlarmManager setExact con WakefulBroadcastReceiver a veces no es exacto
  • ¿Cuán inexacto es setInexactRepeating () para AlarmManager?
  • SetRepeating () de AlarmManager se repite después de 1 minuto sin importar la hora (5 segundos en este caso, API 18+)
  • Compruebe el tiempo de PendingIntent existente en AlarmManager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.