Pregunta AlarmManager no funciona en varios dispositivos


Mi aplicación usa AlarmManager y ha estado funcionando desde hace 4 años. Pero noté que comenzó a fallar en algunos dispositivos.

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

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

Pero recientemente noté que no funcionaba con más dispositivos: Xiaomi, Samsung (¿tal vez está relacionado con el nuevo "Administrador inteligente"?) ... Parece que este comportamiento se está convirtiendo en un estándar: matar a las aplicaciones en segundo plano.

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


76
2018-01-11 19:56


origen


Respuestas:


Estoy tratando de resolverlo varias semanas. No encontré nada. Huawei acaba de matar todas las alarmas después de un tiempo. Si coloco la aplicación en la aplicación protegida en el protector de batería, no sirve de nada. Pero si cambio el nombre del paquete de mi aplicación para que contenga 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 OEM no debería modificar la plataforma central de esa manera. Entiendo que tienen un protector de batería propio que mata la aplicación después de un tiempo, cuando el usuario no la usa. Pero esta matanza alarma también de aplicaciones protegidas.

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


9
2018-02-05 11:34



El problema es Smart Manager. Samsung tiene un administrador de batería que a veces desactiva ciertas aplicaciones para que no se ejecuten en segundo plano. Intentó "reanudar" cuando volvía a la aplicación, pero la inhabilita por completo o puede reanudarla cada 5 minutos (dependiendo de cómo lo tenga Samsung).

Esto funcionaría en versiones estándar de Android ya que no hay un administrador de Samsung. También puede instalar una versión personalizada de Android que tenga algunas funciones para habilitar SM (dependiendo de la rom).


8
2018-01-20 02:02



Use AlarmManager para dispositivos <5.0 y JobScheduler para dispositivos 5.0+. No puedo decir con certeza que JobScheduler no se vea afectado por los chanchullos del fabricante, pero me parece mucho menos probable, dado que Android está tratando de alejar a las personas de AlarmManager y de JobScheduler.


2
2018-06-01 21:10



Dejé de usar AlarmManager hace un tiempo ... una alternativa mejor y más estable

  1. crea un servicio
  2. registrar un BroadcastReceiver para BOOT_COMPLETED
  3. disparar su servicio desde el receptor
  4. inicia un nuevo Handler dentro de tu servicio que se repite cada X minutos (Android: ejecuta un método periódicamente usando la llamada postDelayed ())
  5. compruebe si ha llegado la hora de ejecutar la tarea: ahora - tiempo de ejecución> 0 (¿Cómo encontrar la duración de la diferencia entre dos fechas en java?)
  6. si es así ... ejecuta la tarea y detén el controlador

sí ... es un dolor ... pero el trabajo se hace SIN IMPORTAR LO QUE


1
2018-01-19 21:23



¿Estás escuchando BOOT_COMPLETED? Debe volver a configurar las alarmas cuando reinicie un dispositivo.


1
2018-01-20 01:57



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


1
2018-01-28 08:00



La mayoría de los dispositivos Android modernos vienen con una aplicación o mecanismo, que automágicamente intenta descubrir cómo guardar la batería y, como resultado, puede matar ciertas aplicaciones de terceros. Esto puede dar como resultado la eliminación de trabajos y tareas programadas (por ejemplo, las alarmas no se apagan, la notificación de inserción no funciona, etc.). En muchos casos esto sucede completamente independiente de los mecanismos de ahorro de batería de Android, en mi caso no podría hacer más optimización de la batería cuando detecto algunos modelos de modelo, redirijo al usuario al administrador de inicio para incluir mi aplicación en la lista blanca

Encontraste en este enlace para cada modelo la intención de que debas invocar https://android-arsenal.com/details/1/6771 


1
2017-08-01 11:19



la mayoría de los teléfonos nuevos en la actualidad se incluyen con algún tipo de administrador de ahorro de energía / batería que hace lo mismo que usted describió. sin contar duboosters y maestros limpios.

Creo que debe incluir un descargo de responsabilidad o un faq en la lista de su aplicación o tienda de Play que indique que esta aplicación debe ser excluida de la aplicación del administrador de la batería para que funcione correctamente.


0
2018-01-13 22:21



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

A partir de la API 23, el sistema operativo entrará en modo inactivo de baja potencia cuando no se haya utilizado por un tiempo, y en ese modo las alarmas no se entregarán. Sin embargo, hay una forma en que las aplicaciones dicen explícitamente "Necesito que esta alarma suene en este momento sin importar el uso de la batería"; los nuevos métodos AlarmManager llamados setAndAllowWhileIdle() y setExactAndAllowWhileIdle().

Según su descripción, parece que esta podría no ser la causa particular de sus problemas en ciertos dispositivos de fabricantes de equipos originales, pero esto es algo que todos los desarrolladores que usan el Administrador de alarmas deben tener en cuenta.

Finalmente, muchos usos del Alarm Manager se abordan mejor utilizando los mecanismos del Programador de tareas. Para compatibilidad con versiones anteriores, el "Administrador de red GCM" de Play Services está realmente muy cerca del Job Scheduler en funcionalidad, utiliza el Programador de tareas internamente en versiones más nuevas de Android y no necesariamente se trata de redes, a pesar del nombre de la clase.


0
2018-01-21 01:56



No creo que matar a la aplicación evitará que el administrador de alarma active tu aplicación.

Solo cuando "fuerza la detención" o deshabilita la aplicación, no recibe las llamadas del administrador de alarmas.

La causa raíz podría ser otra cosa.

También en M ... setExactAndAllowWhileIdle acelera ... es decir, si programa una alarma cada 2 minutos, no se activará. .. Debe haber 15 minutos de ventana. .


0
2018-01-19 21:22