Comportamento inesperado do provedor de localização fundida

é assim que eu registro meu aplicativo para receber atualizações de local:

mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(Consts.ONE_MINUTE * 10);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setFastestInterval(Consts.ONE_MINUTE);

Builder builder = new GoogleApiClient.Builder(context);
builder.addApi(ActivityRecognition.API);

mGoogleApiClient = builder.addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

mGoogleApiClient.connect();

....
....

@Override
public void onConnected(Bundle connectionHint) {
   LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationUpdatespendingInent);
}

minha intenção pendente foi invocada em segundo plano quase nos intervalos exatos solicitados ...

Por enquanto, tudo bem.

o problema: Quando o WIFI está desativado / não está conectado a nenhuma rede, ou quando não há dados de rede 3G / 4G ativados - o provedor de localização com fusível não fornece novas atualizações de localização!

minhas configurações de acesso à localização estão ativadas e os satélites GPS, o Wi-Fi e a localização da rede móvel são verificados.

o problema ainda maior: às vezes, nesse caso, recebo retornos de chamada de atualizações de local por intenção pendente, mas com o último local que ele conhecia (mesmo que fosse há uma hora atrás, e há muito tempo que viajei quilômetros desse local)

de acordo com a documentação dePRIORITY_BALANCED_POWER_ACCURACY :

Usado com setPriority (int) para solicitar a precisão do nível de "bloqueio". A precisão no nível do bloco é considerada com precisão de cerca de 100 metros. Usar uma precisão grossa como essa geralmente consome menos energia.

Espero que o provedor de localização com fusível abra o GPS quando não tiver outra opção ou, pelo menos, não forneça novas atualizações de localização se ele não tiver nenhuma.

outra questão imprevisível e perturbadora:

eu mudeiPRIORITY_BALANCED_POWER_ACCURACY paraPRIORITY_HIGH_ACCURACY para ver como ele se comporta (por 24 horas). todos os intervalos permaneceram os mesmos (intervalo de 10 minutos entre as atualizações). localização precisa de fato recebida mesmo em telefones sem cartão de rede / sim, mas - a bateria esgotou rapidamente! quando olhei para o histórico da bateria, fiquei surpreso ao ver queO rádio GPS estava no modo de transmissão total o tempo todo !!!! e vi também no meu registro que a localização era recebida a cada minuto, mesmo solicitando a localização a cada dez minutos (não tenho outros aplicativos instalados que abrem o GPS para receber localizações)

Percebi esse comportamento em vários dispositivos (como Moto X 2013, HTC One X, Nexus 5), todos com os serviços mais recentes do Google Play (versão 6.1.11) e o Android KITKAT 4.4.4

meu aplicativo depende muito da localização atual do usuário e recebe periodicamente atualizações de localização no intervalo especificado, desde que o usuário esteja conectado, portanto, não quero usar oPRIORITY_HIGH_ACCURACY modo, para evitar o consumo de bateria.

minhas perguntas:

é o provedor de localização com fusível, suponha usar o GPS, se estiver configurado para receber atualizações comPRIORITY_BALANCED_POWER_ACCURACY e não tem nenhuma informação sobre WI-FI ou torres de celular?

se isso acontecer, o que estou fazendo de errado?

por que estou recebendo essas atualizações enganosas de local que não estão corretas? (como expliquei na seção "problema ainda maior").

por que o rádio GPS é aberto o tempo todo em vez de ser aberto pelo intervalo de 10 minutos quando eu usei oPRIORITY_HIGH_ACCURACY parâmetro? (Não tenho outros aplicativos instalados que acionam atualizações de local mais rapidamente.)

questionAnswers(4)

yourAnswerToTheQuestion