Permitir entrar no aplicativo somente se pelo menos um provedor de localização estiver habilitado no Android
-
14-11-2019 - |
Pergunta
Na minha aplicação o usuário deve ter pelo menos um provedor de localização habilitado.Para saber se um está habilitado eu uso:
isGpsLocationEnabled = ((LocationManager) getSystemService(LOCATION_SERVICE))
.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkLocationEnabled = ((LocationManager) getSystemService(LOCATION_SERVICE))
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Agora, criei uma Activity alertando que nada está habilitado e se o usuário selecionar "Habilitar GPS" abro as opções de GPS com intenção ACTION_LOCATION_SOURCE_SETTINGS.
Quero (após a seleção do usuário) verificar se ele ativou um, e só deixá-lo continuar se o fez.
Tenho esse código no botão "Ativar GPS"
showGpsOptions();
isGpsLocationEnabled = ((LocationManager) getSystemService(LOCATION_SERVICE))
.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkLocationEnabled = ((LocationManager) getSystemService(LOCATION_SERVICE))
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (isGpsLocationEnabled || isNetworkLocationEnabled){
Intent startIntent = new Intent(EnableLocationProviderActivity.this, SensingService.class);
startService(startIntent);
} else {
finish();
}
Meu problema é que isGpsLocationEnabled e isNetworkLocationEnabled nunca são atualizados com a seleção do usuário nas configurações de rede, pois o código continua sua execução após showGpsOptions() (sei que não é possível bloquear o thread da interface do usuário, mas como posso superar essa situação)?
Existe alguma maneira de executar o código depois que o usuário seleciona algo nas configurações de rede?
Obrigado!Guilherme.
Solução
quando Tela de configurações venha na frente do seu activity
, logicamente e de acordo com os documentos, seu activity
é paused
e então, quando for necessário, seu activity
é resumed
...então eu acho que você deve usar o código de verificação em onResume
...