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
|
200ft ou 60m | Média Baixa |
GPS assistido (AGPS), Provider: network
|
5300ft ou 1.6km | Baixa |
CellID lookup/WiFi MACID lookup, Provider: network or passive
|
---|
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
0sem comentários ainda