Ir para o conteúdo
ou

Software livre Brasil

 Voltar a Blog de Thia...
Tela cheia

Pegando a posição GPS no Android

27 de Junho de 2014, 20:31 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 1463 vezes

Um recurso muito interessante de se manipular em um dispositivo mobile é o seu posicionamento GPS(Global Positioning System) que fornece coordenadas de Latitude e Longitude permitindo criar aplicações que com base onde você está se comporta de maneira diferente ou gera resultados diferentes.

Para começarmos devemos saber que um dispositivo Android possui uma classe para trabalharmos com localização, a classe LocationManager, esta classe não deve ser instanciada por nós, mas sim recuperada recuperada do sistema através do método:

	LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

Para ela funcionar corretamente devemos adicionar no nosso AndroidManifest.xml as seguintes permissões

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Para acessar somente a localização pela Rede.

	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Para acessar a localização pela Rede e pelo GPS do dispositivo

Como vimos nas permissões acima podemos pegar a posição do dispositivo de diversas fontes, que chamamos de location provider, podemos listar todos os location provider através do siguinte método:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
	
	for(String provider : locationManager.getAllProviders()){
		Toast.makeText(getApplicationContext(), provider, Toast.LENGTH_LONG).show();
	}

Normalmente deve retornar 3 tipos de location provider:

passive(CellID, WiFi MACID): Este provider utiliza a posição adquirida por outro programa ou serviço, sem propriamente pedir uma nova posição para o sistema. Pode ser representado pela constante LocationManager.PASSIVE_PROVIDER.

network (AGPS, CellID, WiFi MACID): Este provider utiliza a disponibilidade de torres de celular e pontos de acesso Wi-Fi para determinar uma posição. Pode ser representado pela constante LocationManager.NETWORK_PROVIDER.

gps (GPS, AGPS): Este provider utiliza os satélites GPS para determinar uma posição. Pode demorar um tempo para determinar a posição. Pode ser representado pela constate LocationManager.GPS_PROVIDER.

Precisão Uso de Energia Tecnologia
20ft ou 6m Alta GPS, Provider: gps
  • usa o chip GPS do dispositivo
  • linha de visão com os satélites
  • necessita cerca de 7 satélites para travar a prosição
  • leva muito tempo para travar uma posição
  • não funciona em torno de edifícios altos
200ft ou 60m Média Baixa GPS assistido (AGPS), Provider: network
  • usa o chip GPS do dispositivo, e também recebe dados de suporte da rede(celular) para travar a posição mais rapidamente
  • consumo de energia é baixa
  • muito preciso
  • funciona sem uma linha de visão para o céu
  • dependa da operadora de celular fornecer este recurso
5300ft ou 1.6km Baixa CellID lookup/WiFi MACID lookup, Provider: network or passive
  • trava a posição muito rapidamente e não necessita que o dispositivo tenha um chip GPS
  • precisão muito baixa
  • muito pouco preciso embora as possa ter uma precisão melhor em locais com muitos access point WIFI.

Agora que já sabemos de onde pegar a posição do dispositivo vamos fazer uma unica requisição:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER , new LocationListener() {

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
Toast.makeText(getApplicationContext(), “Status alterado”, Toast.LENGTH_LONG);
}

@Override
public void onProviderEnabled(String arg0) {
Toast.makeText(getApplicationContext(), “Provider Habilitado”, Toast.LENGTH_LONG);
}

@Override
public void onProviderDisabled(String arg0) {
Toast.makeText(getApplicationContext(), “Provider Desabilitado”, Toast.LENGTH_LONG);
}

@Override
public void onLocationChanged(Location location) {
TextView latitude = (TextView) findViewById( R.id.latitude);
TextView longitude = (TextView) findViewById( R.id.longitude);
TextView time = (TextView) findViewById( R.id.time);
TextView acuracy = (TextView) findViewById( R.id.Acuracy);

if( location != null ){
latitude.setText( “Latitude: “+location.getLatitude() );
longitude.setText( “Longitude: “+location.getLongitude() );
acuracy.setText( “Precisão: “+location.getAccuracy()+”” );

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”);
time.setText( “Data:”+sdf.format( location.getTime() ) );
}

}
}, null );

http://developer.android.com/guide/topics/location/strategies.html


Fonte: http://www.botecodigital.info/android/pegando-a-posicao-gps-no-android/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.