Como aumentar a consistência das notificações de entrada/saída do Android geofence?

estou a usar a APIs de geofence construída (serviços de jogo) e tenho tido resultados mistos. Parece que depois de definir um geofence, as notificações para entrar/sair são muito inconsistentes, mesmo quando o GPS Está ligado, com um local atualizado (Localizationclient ligado, rodando em segundo plano. Comecei a monitorar as mudanças de localização (votação) e as distâncias em um campo de texto de depuração, e vi que, mesmo quando baseado na localização registrada pelo dispositivo e a localização da geofence Estou tecnicamente dentro/fora da geofence, as notificações são por vezes desencadeadas e por vezes não. Alguma maneira de tornar isto mais previsível? Estou quase tentado a abandonar esta api e implementar as minhas próprias geofências (drenagem de baterias) com base na sondagem da localização do dispositivo.

Author: oviroa, 2014-01-28

1 answers

Algumas sugestões:

  1. Certifique-se de que você está usando um BroadcastReceiver e não um Serviço para receber as transições, caso contrário você não vai/não pode obtê-lo se o seu aplicativo é morto/desligado. Como discutido aqui: A Geofência Andróide acaba por parar de receber intentos de transição.

  2. Certifique-se que recria as suas geofences após o dispositivo ser reiniciado, de preferência utilizando um receptor de transmissão de arranque. Como discutido aqui: As Geofências permanecem activas em android depois de reiniciar um dispositivo

  3. Um outro equívoco comum, e que me surpreendeu uma vez que é diferente do IOS é que você sempre terá um gatilho imediatamente para um recém criado geofence, se o dispositivo descobrir que você está dentro do geofence ao criá-lo. Eu mesmo resolvi isso usando um "período de graça" para geofências recém-criadas, que eu expliquei neste tópico: addProximityAlert não funciona como esperado

Finalmente um. coisa importante: ter o seu cliente de localização ligado na sua aplicação ou não não deve importar nada se {[25] } seguir os pontos acima. O meu processo para adicionar ou remover Geofências no meu código é basicamente:

  1. Criar e ligar o locationclient.

  2. No connect-callback, adicione / remova o geofence (s)

  3. Em geofence-result callback, desconecte locationclient.

Cada vez que isto acontece, o meu cliente de localização é apenas ... conectado alguns segundos no total. O sistema operacional ainda irá produzir alertas de geofence e ligar para o meu receptor de radiodifusão sempre que eles acontecerem. Se fizeres estas coisas, aposto que a tua experiência vai melhorar. Espero que isto ajude!
 43
Author: Mathias, 2017-05-23 12:34:32