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.
1 answers
Algumas sugestões:
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.
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
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:
Criar e ligar o locationclient.
No connect-callback, adicione / remova o geofence (s)
Em geofence-result callback, desconecte locationclient.