Permitir entrar no aplicativo somente se pelo menos um provedor de localização estiver habilitado no Android

StackOverflow https://stackoverflow.com/questions/9493874

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.

Foi útil?

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...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top