GPS (Resolvido)

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,