Localização Usuário - Duvidas

2 respostas
L

Galera, precisando da ajuda de vocês.

Um serviço no app que roda em segundo plano em uma aplicação de força de vendas.

Tenho classe que estende um BroadcastReceiver, para verificar se o serviço está ativo e fazer os devidos tratamentos e tenho uma classe que estende Service e que implemente os métodos:

  • GoogleApiClient.ConnectionCallbacks
  • GoogleApiClient.OnConnectionFailedListener
  • LocationListener

Isso tudo para obter a localização do usuário de tempos em tempos (a cada 1 minuto) onde o servidor solicita o envio das coordenada pelo firebase cloud message (FCM).

Depois de obter todas as lozalizações dentro deste 1 minuto, preciso enviar para um servidor (utilizando a biblioteca ion).

Meu problema é o seguinte, deixo a localização gravada num segundo banco de dados da aplicação, pois, quando o usuario está utilizando a aplicação (emitindo pedido por exemplo) e o serviço tenta gravar a localização esta dando exceção abaixo, pode ser porque o banco foi aberto duas vezes?

android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)

Tentei utilizar o SharedPreferences, mais é que antes de enviar a localização dentro do 1 minutos vão ter X coordenadas gravadas e eu não tenho ideia de como fazer isso no SharedPreferences.

Daria para garvar em um Arraylist? Creio que corro o risco de perder as informações

Qual a melhor forma de fazer isso, utiliziar um segundo banco, sharedPreferences ou arraylist? Ou tem outra maneira melhor de fazer isso

Sem falar que durante o dia o usuário pode ficar sem serviço dados por estar em um cidade com cobertura ruim da operadora, podendo não enviar a cada um minuto a localização, mais mesmo assim ao final do dia preciso que envie todas as localizações capturadas.

E sobre logica que utilizando, seria a forma mais correta? Está no dicionario de boa praticas?

Desde já obrigado, valeu galera.

2 Respostas

J

Porque o uso de duas bases? É necessário? Sobre o envio de informações quando o usuário estiver “dados”, eu indico utilizar o GCMNetworkManager, o Thiengo fez um video explicando: https://www.thiengo.com.br/gcmnetworkmanager-para-execucao-de-tarefas-no-background-android
Nele você pode executar uma tarefa de até 3 minutos em background, deixando que para a própria lib, definir o melhor momento para mandar as informações.

L

Valeu, vou ler mais sobre o GCM NetworkManager.

Sobre utilizar duas bases de dados, acho que sim, pois, creio eu que, corro o risco do usuário esta utilizando o banco para gravar um pedido por exemplo com o e ainda não fechou a conexão com o banco e nesse meio tempo quando rodar o service que tambem vai utilizar o banco para gravar/ler apresentar o erro:

android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)

Concorda ou estou viajando na maionese?

Criado 21 de setembro de 2017
Ultima resposta 21 de set. de 2017
Respostas 2
Participantes 2