2017-08-12 4 views
3

J'ai une méthode qui s'exécute périodiquement pour maintenir une connexion réseau active. Pendant le mode Doze, je voudrais le désactiver pour qu'il s'exécute périodiquement et qu'il s'exécute exactement une fois pendant une fenêtre de maintenance. Lorsque l'appareil sort de Doze, j'aimerais que la méthode soit appelée de nouveau périodiquement. Comment puis-je accomplir cela ?Comment différencier le périphérique entrant dans une fenêtre de maintenance de Doze et sortant de Doze

J'ai enregistré un récepteur qui écoute la diffusion PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED puis appelle PowerManager.isDeviceIdleMode(). Cependant, ce retour est faux pour les deux cas - pendant une fenêtre de maintenance et lorsque l'appareil quitte le mode Doze. Comment puis-je les différencier?

Répondre

0

J'ai fait face au même problème, même si je pense que Android doit différencier cela en envoyant un état différent dans le récepteur ou fournir une fonction pour demander un tel état, je n'ai rien trouvé de connexe. Rappelez-vous, le ACTION_DEVICE_IDLE_MODE_CHANGED est renvoyé lorsque vous revenez à somnoler après une période de 9-10 minutes.

la solution sera:

STATUT DE DISPOSITIF DE COURANT -> "EN DOZE IDLE"

lorsque vous recevez ACTION_DEVICE_IDLE_MODE_CHANGED et isDeviceIdleMode() est faux votre statut est "hors de soupçon somnole" -NE votre fenêtre mantenience fonctionne ET configure une alarme pour 15 minutes dans le futur.

lors du changement de mode suivant.

si ACTION_DEVICE_IDLE_MODE_CHANGED est déclenché avant l'alarme et que isDeviceIdleMode() a la valeur true, il s'agit donc d'une fenêtre de mantenience. "out of doze false", (éteindre l'alarme).

si l'alarme se déclenche d'abord, cela signifie qu'il était « hors de somnoler vrai confirmé » -Ne votre configuration pour « de somnoler » dans l'alarme

Les horaires de somnoler sont en docs. assurez-vous de vérifier cela en premier. (peut changer dans le futur, comme cela est déjà arrivé * peut être qu'il y a une constante pour obtenir cette valeur - je ne sais pas). Je considère cela comme un hack plutôt que comme une solution complètement repliée. mais cela fonctionne jusqu'à ce que tout futur travail étendu sur android fournisse un autre appel à ACTION_DEVICE_IDLE_MODE_CHANGED, avec un statut "out of doze".