Olá colegas,
gostaria de saber se tem como pegar a latitude e longitude de uma pessoa? o livro que estou estudando não mostra essa opção. Tenho esse trecho:
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double latitude = location.getLatitude();
double longitude = location.getLongitude();
int latitudeE6 = (int)(latitude*1E6);
int longitudeE6 = (int)(longitude*1E6);
GeoPoint point = new GeoPoint(latitudeE6,longitudeE6);
E no Manifest:
[code]
[/code]
Porém dá erro qdo vou rodar a app.
Obrigado à todos.
Abs.
Uma outra pergunta… essa localização automática, funcionaria no emulador do Android no meu PC? Acho que é por isso que está dando erro, não?
Ao rodar, dá esse erro no logcast. (vale lembrar que foram efetuados testes no emulador desktop e diretamente no meu smartphone):
07-24 14:32:51.738: E/AndroidRuntime(315): Uncaught handler: thread main exiting due to uncaught exception
07-24 14:32:51.748: E/AndroidRuntime(315): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.androidmapas/br.com.androidmapas.MainActivity}: java.lang.NullPointerException
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.os.Handler.dispatchMessage(Handler.java:99)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.os.Looper.loop(Looper.java:123)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-24 14:32:51.748: E/AndroidRuntime(315): at java.lang.reflect.Method.invokeNative(Native Method)
07-24 14:32:51.748: E/AndroidRuntime(315): at java.lang.reflect.Method.invoke(Method.java:521)
07-24 14:32:51.748: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-24 14:32:51.748: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-24 14:32:51.748: E/AndroidRuntime(315): at dalvik.system.NativeStart.main(Native Method)
07-24 14:32:51.748: E/AndroidRuntime(315): Caused by: java.lang.NullPointerException
07-24 14:32:51.748: E/AndroidRuntime(315): at br.com.androidmapas.MainActivity.onCreate(MainActivity.java:39)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-24 14:32:51.748: E/AndroidRuntime(315): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
07-24 14:32:51.748: E/AndroidRuntime(315): ... 11 more
Abraços
Vc fez isso dentro de um LocationListener?
Mostrei mais o codigo cara.
Abraço,
Olá Gabriel.
Sim… foi colocado dentro do LocationListener. Na verdade o que postei foi o erro que está ocorrendo… o código segue abaixo:
package br.com.androidmapas;
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
//import android.app.Activity;
import android.view.Menu;
public class EthosMobile extends MapActivity implements LocationListener{
@SuppressWarnings("unused")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);// zoom
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this);
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double latitude = location.getLatitude();
double longitude = location.getLongitude();
int latitudeE6 = (int)(latitude*1E6);
int longitudeE6 = (int)(longitude*1E6);
GeoPoint point = new GeoPoint(latitudeE6,longitudeE6);
OverlayItem overlayitem = new OverlayItem(point, "Onde estou?", "Estou localizado em XXXXX");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
O erro segue abaixo. (foi selecionado apenas as linhas vermelhas)…
07-24 13:59:21.414: E/AndroidRuntime(23206): FATAL EXCEPTION: main
07-24 13:59:21.414: E/AndroidRuntime(23206): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.androidmapas/br.com.androidmapas.EthosMobile}: java.lang.NullPointerException
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1702)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1722)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.ActivityThread.access$1500(ActivityThread.java:124)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:974)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.os.Handler.dispatchMessage(Handler.java:99)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.os.Looper.loop(Looper.java:130)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.ActivityThread.main(ActivityThread.java:3821)
07-24 13:59:21.414: E/AndroidRuntime(23206): at java.lang.reflect.Method.invokeNative(Native Method)
07-24 13:59:21.414: E/AndroidRuntime(23206): at java.lang.reflect.Method.invoke(Method.java:507)
07-24 13:59:21.414: E/AndroidRuntime(23206): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-24 13:59:21.414: E/AndroidRuntime(23206): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-24 13:59:21.414: E/AndroidRuntime(23206): at dalvik.system.NativeStart.main(Native Method)
07-24 13:59:21.414: E/AndroidRuntime(23206): Caused by: java.lang.NullPointerException
07-24 13:59:21.414: E/AndroidRuntime(23206): at br.com.androidmapas.EthosMobile.onCreate(EthosMobile.java:39)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-24 13:59:21.414: E/AndroidRuntime(23206): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
07-24 13:59:21.414: E/AndroidRuntime(23206): ... 11 more
Tente verificar os valores assim que fosse pega no getLatitude e getLongitude antes de seta-los para algum lugar. Use toast, por exemplo.
Algum valor que vc esta trabalhando esta vindo como nulo.
Abraço,
Olá Gabriel.
Sou novo no Android…para eu depurar com o toast, seria algo mais ou menos assim?
Toast toast = Toast.makeText(context, "Depurar o erro", Toast.LENGTH_LONG);
toast.show();
Eu colocaria embaixo das linhas?
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Obrigado.
Coloque as variaveis dentro da Toast mano.
Abraço,
Coloque as variaveis dentro da Toast mano.
Abraço,
Olá Gabriel.
Colocaria dessa forma?
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Toast.makeText(this, "ERROS OCORRIDOS " + latitude + longitude, Toast.LENGTH_LONG).show();
Abs
Isso, vai testando e posta!
Abraço,
Olá Gabriel.
Desculpe na demora da resposta. Futucando aqui, navegando ali, cheguei a esse código que funciona perfeitamente, veja:
MapView mapView1 = (MapView) findViewById(R.id.mapview) ;
mapView1.setClickable(true) ;
MyLocationOverlay mlo = new MyLocationOverlay(this, mapView1) ;
mlo.enableCompass() ;
mlo.enableMyLocation() ;
mapView1.getOverlays().add(mlo) ;
Para quem precisar, segue a fonte abaixo:
Fonte: http://blog.caelum.com.br/usando-o-google-maps-e-gps-no-android/
Obrigado pela sua força.
Abraços
Nada cara, estamos ai. Marque o post como resolvido e ajude outros que poderão ter essa duvida!
Abraço,