Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Localização em segundo plano

preciso capturar as coordenadas geográficas do usuário com o aplicativo rodando em segundo plano. há alguma maneira de deixar o gps funcionando em segundo plano? já implementei um serviço, este fica ativo, porém o gps para de atualizar as coordenadas. obs.: preferência em java, obrigado.

3 respostas

Oi Felismario, tudo bem?

É possível fazer isso utilizando serviços em segundo plano. Mas é importante falar que o GPS pode parar de atualizar as coordenadas em segundo plano devido a restrições impostas pelo sistema operacional, como economia de energia por exemplo.

Você pode contornar isso utilizando o Fused Location Provider API do Google Play Services. Essa API combina dados de diferentes provedores de localização, como GPS, Wi-Fi e torres de celular, para fornecer uma localização mais precisa e atualizada.

Se você olhar na parte de Documentos, verá a opção em Java.

print da tela documentos mostrando código em java: protected void createLocationRequest() {
  LocationRequest locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build();
}

A documentação é bem rica e vai te ajudar bastante.

Um abraço e bons estudos.

Olá Felismario!

Capturar as coordenadas geográficas do usuário com o aplicativo rodando em segundo plano pode ser um desafio, mas é possível fazer isso utilizando o GPS. No entanto, é importante ressaltar que o GPS pode consumir bastante bateria, então é necessário ter cuidado ao implementar essa funcionalidade.

Uma maneira de deixar o GPS funcionando em segundo plano é utilizando um serviço em conjunto com a classe LocationManager. O serviço será responsável por manter o GPS ativo mesmo quando o aplicativo estiver em segundo plano.

Você pode implementar o serviço da seguinte maneira em Java:

public class MyLocationService extends Service implements LocationListener {

    private LocationManager locationManager;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
        return START_STICKY;
    }

    @Override
    public void onLocationChanged(Location location) {
        // Aqui você pode obter as coordenadas geográficas atualizadas
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        // Faça o que precisa com as coordenadas
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        locationManager.removeUpdates(this);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

Lembre-se de declarar o serviço no arquivo AndroidManifest.xml:

<service android:name=".MyLocationService" />

Você também pode estudar um pouco essa página da Documentação do Android sobre Acessar a localização em segundo plano

Dessa forma, o serviço será iniciado quando o aplicativo for aberto e continuará rodando em segundo plano mesmo quando o aplicativo estiver minimizado ou fechado.

Qualquer dúvida, estarei à disposição :)

solução!

Obrigado pelo apoio, vocês são top demais! Apenas duas observações: Utilizei a API Fused Location, porém não funcionou da forma que eu necessito. Talvez não tenha implementado da forma correta . Herdando da classe Service acontece que, o serviço roda em segundo plano, mas quando o aplicativo vai para background a atualização do GPS paralisa. Utilizei requestLocationUpdates() e LocationCallback, desta forma resolveu. Sendo assim, quando o aplicativo não está visível na tela esta foi a forma que consegui capturar a atualização das coordenadas. Agradeço a atenção de vocês. Plataforma nota 10.