Esse tutorial é bem simples. Se você quer saber sua latitude e longitude no Android e usar na sua aplicação, leia abaixo.
Essa é uma simples classe Activity chamada GpsDisplay. Nel, eu pego alguns TextViews e exibo as informações que eu quero, vindas do GPS.
O GPS pode fornecer essas informações para você.
final TextView acc = (TextView)findViewById(R.id.txtAccuracy); final TextView alt = (TextView)findViewById(R.id.txtAltitude); final TextView lat = (TextView)findViewById(R.id.txtLatitude); final TextView longi = (TextView)findViewById(R.id.txtLongitude); final TextView pro = (TextView)findViewById(R.id.txtProvider); final TextView spd = (TextView)findViewById(R.id.txtSpeed); final TextView proList = (TextView)findViewById(R.id.txtProvList);
- Precisão = Accuracy
- Altitude
- Latitude
- Longitude
- Provider = Que é de onde ele está tirando a informação. Pode ser o gps ou network(internet).
- Speed – Velocidade a qual vocÊ está se movimentando.
- E por ultimo, uma lista de providers.
Nessa View, eu criei vários TextView´s para exibir as informações e um botão, que ao ser clicado, ele irá criar objetos da classe LocationManager e Location e mais uma String que armazenará os providers.
Button retrieve = (Button)findViewById(R.id.btnRetrieve);
retrieve.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LocationManager LM = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
String bestProvider = LM.getBestProvider(new Criteria(),true);
//System.out.println("*************"+LM.getBestProvider(new Criteria(),true));
Location l = LM.getLastKnownLocation(bestProvider);
if(l!=null){
acc.setText(String.valueOf(l.getAccuracy()));
alt.setText(String.valueOf(l.getAltitude()));
lat.setText(String.valueOf(l.getLatitude()));
longi.setText(String.valueOf(l.getLongitude()));
pro.setText(String.valueOf(l.getProvider()));
spd.setText(String.valueOf(l.getSpeed()));
proList.setText(String.valueOf(LM.getAllProviders()));
}else{
acc.setText(R.string.noInfo);
alt.setText(R.string.noInfo);
lat.setText(R.string.noInfo);
longi.setText(R.string.noInfo);
pro.setText(R.string.noInfo);
spd.setText(R.string.noInfo);
proList.setText(R.string.noInfo);
}
}
});
LocationManager pega o serviço que está disponível, no caso, o serviço de localização, que é o que o GPS usa.
A String bestProvider armazena o melhor provider(o provedor de localização) que estiver disponível.
Ao criar um objeto Location ele pega a ultima localização(que seria a atual), e atribui ao objeto location.
Se o objeto não estiver nulo,
Através dele, conseguimos pegar os items citados no começo do post.
Senão,
os textViews são settados para “No Information”. Isso pode ocorrer no caso do GPS estiver desligado, ou no caso do emulador.
Maaasss. Pra isso tudo funcionar certinho, voce tem que editar o AndroidManifest.xml
E nele, voce adiciona uma uses-permission como aqui:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> </uses-permission>
Abaixo segue o AndroidManifest.xml a classe que pega o gps e o main.xml.
Até mais.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="lab.blog.ps" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".GpsDisplay" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> </uses-permission> </manifest>
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnRetrieve" android:text = "Retrieve Data" android:layout_gravity="center" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Accuracy" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/noInfo" android:id="@+id/txtAccuracy" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Altitude" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/noInfo" android:id="@+id/txtAltitude" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Latitude" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/noInfo" android:id="@+id/txtLatitude" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Longitude" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/noInfo" android:id="@+id/txtLongitude" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Provider" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/noInfo" android:id="@+id/txtProvider" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Speed" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/noInfo" android:id="@+id/txtSpeed" /> </TableRow> </TableLayout> <TextView android:layout_marginTop="10px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Providers currently available" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="------------------------------" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:id="@+id/txtProvList" /> </LinearLayout>
GpsDisplay.java
import android.app.Activity;
import android.content.Context;
import android.view.View.OnClickListener;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class GpsDisplay extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView acc = (TextView)findViewById(R.id.txtAccuracy);
final TextView alt = (TextView)findViewById(R.id.txtAltitude);
final TextView lat = (TextView)findViewById(R.id.txtLatitude);
final TextView longi = (TextView)findViewById(R.id.txtLongitude);
final TextView pro = (TextView)findViewById(R.id.txtProvider);
final TextView spd = (TextView)findViewById(R.id.txtSpeed);
final TextView proList = (TextView)findViewById(R.id.txtProvList);
Button retrieve = (Button)findViewById(R.id.btnRetrieve);
retrieve.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LocationManager LM = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
String bestProvider = LM.getBestProvider(new Criteria(),true);
//System.out.println("*************"+LM.getBestProvider(new Criteria(),true));
Location l = LM.getLastKnownLocation(bestProvider);
if(l!=null){
acc.setText(String.valueOf(l.getAccuracy()));
alt.setText(String.valueOf(l.getAltitude()));
lat.setText(String.valueOf(l.getLatitude()));
longi.setText(String.valueOf(l.getLongitude()));
pro.setText(String.valueOf(l.getProvider()));
spd.setText(String.valueOf(l.getSpeed()));
proList.setText(String.valueOf(LM.getAllProviders()));
}else{
acc.setText(R.string.noInfo);
alt.setText(R.string.noInfo);
lat.setText(R.string.noInfo);
longi.setText(R.string.noInfo);
pro.setText(R.string.noInfo);
spd.setText(R.string.noInfo);
proList.setText(R.string.noInfo);
}
}
});
}
}


pode postar arquivo apk ?
Opa…
APK upado!!!
http://www.4shared.com/folder/rQKoxxTZ/APKs.html
Como eu fiz no meu note e nem upei no marketing, a apk esta unsigned.
mas acredito que funcione em um smartphone android.
update no link.
dei uma arrumada pq adicionei locationListener.
vc pode baixar os dois e vera a diferenca..
abs
http://www.4shared.com/android/_mgi_htU/UsingGPS_2.html
Excelente tutorial….curti muito!! Obrigado por expor seu conhecimento =)
tche como testo isso dai num emulador?? pegando as lat longs de um emulador tem como???
TEm como eu simular isso dai num emulador pegando as lat longs nele????
Tem como você emular isso através do DDMS.
Se você não estive vendo isso no Eclipse, vá em Window(Janela)->Show View->DDMS (Se não aparecer DDMS aqui, vá em “Other (Outro)”) e na parte Android você encontrará!
Dê uma olhada nesse meu post ->
https://renatopuccinipt.com/2012/05/07/emular-latitude-e-longitude/
abraços
Se não achar por DDMS procure por Emulador Control.
Muito obrigada por essa informação, eu tentei usar com o emulador, mas o resultado é mesmo No Information, já mudei as coordenadas no Emulador Control mas parece que nem assim o emulador vai buscá-las. Entretanto hei-de de tentar num dispositivo móvel para testar.
Obrigada
Estranho. Deveria funcionar perfeitamente no emulador.
Quer mandar seu código pra eu dar uma olhada?
Muito bom tutorial, parabéns.
Você teria algum exemplo ou tutorial de como pegar os dados do gps através de um serviço que executa em background.
Estou tendo problemas com isso, meu serviço esta rodando perfeitamentamente ele executa tudo, mas nara hora de pegar latitude e longitude ele retorna erro.
Quando eu chamo a função do objeto .getLatitude(), ele cai no catch com o erro.
08-27 00:19:26.308: W/System.err(420): java.lang.NullPointerException
08-27 00:19:26.308: W/System.err(420): at br.com.exemplo.GPSTracker.getLocation(GPSTracker.java:78)
08-27 00:19:26.308: W/System.err(420): at br.com.exemplo.GPSTracker$1.run(GPSTracker.java:45)
08-27 00:19:26.308: W/System.err(420): at java.util.Timer$TimerImpl.run(Timer.java:289)
Muito obrigado.
Eu tenho um código sim que força o gps ficar trabalhando em background até ele pegar a lat e long usando um listener. LocationListener
Eu não tenho ele aqui na minha máquina, mas vou ver se a noite eu posto aqui.
abs
Vlw, fico no aguardo!
Baixei os 2 aplicativos no 4shared e no meu celular com android 2.2 nao instala de jeito nenhum. retorna com a mensagem: o aplicativo nao esta instalado.
Joao,
Quais aplicativos voce baixou ??
No Emulador não funciona a seguinte linha:
LocationManager LM = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
String bestProvider = LM.getBestProvider(new Criteria(),true);
Location l = LM.getLastKnownLocation(bestProvider);
Sempre dará nullPointer, só funciona no celular.
Você setou a latitude a longitude do emulador?
Window->Show View->Other…
Android-> Emulator Control.
Dentro do Emulator Control você poderá ver um menu chamado Location Controls
Aonde você seta a Latitude e Longitude to Emulador, com isso seu Location Manager será capaz de se instanciar e pegar um objeto location.
Tenta isso que vai dar certo.
abs
Renato, tentei fazer o seguinte :
Location location = locationmanager.getLastKnownLocation(provider);
la = location.getLatitude();
lo = location.getLongitude();
porem o location esta vindo null
e esta habilitado a opcao que vc falou conforme a imagem :
http://www.4shared.com/photo/XZIGVw42/imagem2.html
sim, exatamente.
Renato, bom dia…
Sou novo com aplicações android e estou estudando a api maps v2, ainda não achei um tutorial explicando como posso pegar a latlng do ponto clicado (por exemplo, dou zoom até uma certa rua e clico em determinado ponto…) gostaria de saber como pegar o latlng dele para poder upar isto num servidor…
Será que poderias me ajudar?
Desde já agradeço e parabenizo pelo site, uma vez que ajuda muito a entender como tudo funciona.
Abraço.
Cara, eu nunca fiz isso.
Mas eu imagino que seja no metodo quando o usuario clica, voce pega o ponto em que ele clicou, x e y, e pede pro seu mapa retorna a lat e long de x e y onde o usuario clicou.
Show, um dos melhores post q eu ja vi sobre o assunto.
PARABÉNS
Muito bom o post, parabéns.
Estou tendo um problema, quando não tenho uma posição válida atual (desativo 3g e GPS), ele me retorna a última posição. Sabe como tratar isso para não retornar nada?
cara, voce pode tentar setar o provider para pegar a melhor e ultima posicao do GPS.
E tambem voce pode guardar a ultima voce que recebeu um location e comprar o location velho com o novo.
E mandar ele atualizar ate eles serem diferentes.
Muito bom o post!
Mas estou com uma dúvida, quando eu chamo o método pra baixar a latitude e longitude, ele baixa muito rápido, e por isso, quando estou conectado a internet da vivo, os dados não é exatamente do local aonde eu estou. E quando vou no mapa do celular, coloco pra aparecer meu local e demora um pouco até ele localizar corretamente.
Então, teria como nesse programa que baixa a latitude e longitude, ele buscar por alguns segundos as coordenadas, um tempo que fosse possível baixar as coordenadas mais corretamente?
Porque quando estou conectado ao Wi-fi vem certinho, mas estou desenvolvendo um projeto que precisaria saber o local correto onde a pessoa está, e possivelmente o celular estaria conectado a uma rede da operadora do celular.
Se souber de algo sobre isso, me ajudaria muito! Obrigado.
Cara, passei pelo mesmo problema.
AS vezes as antenas das operadoras nao conseguem fornecer sua posicao exata. Usando o GPS e wi-fi funciona bem.
E as vezes essa posicao que aparece no seu mapa eh de uma antena de operadora.
Saca como eh triangulacao de posicao por antenas ?
Tenta melhorar o accuracy do provider.
Beleza, valeu! Vou dar uma olhada aqui
blz cara.. aqui no meu caso ele não pegou a posição correta, como faço pra ele pegar exatamente a posição pelo gps, acho que lee pegou pelo wifi saca?
Voce pode forcar o provider pegar a latitude somente do gps.
ao inves de escolher o melhor provider, soh usar a String de LocationManager.GPS_PROVIDER e assim voce forca ele pegar as coordenadas do gps
cara, a partir disso vc consegue identificar o estado que o dispositivo está?
(SP, RJ….)
tem que ver o que a google api oferece. Não cheguei a fazer isso, mas acredito que a api do google posso prover isso
cara, to tentando usar, mas ele não consegue pegar a informação não, o GPS está ligado, mas não tenho conexão com a internet… é preciso ter conexão ou apenas com o GPS é possível pegar as informações?
Eu coloquei um background maneiro, e uso o metodo Toast para mostrar os dados atualizados.
A vantagem se eu to num mapa ele mostra dentro do mapa os valores.Mas o seu programa ficou bem estruturado.