Dúvida urgente sobre a API Location, LBS, GPS

Pessoal, estou com dúvidas sobre como rodar uma aplicação usando a API Location, como que faço pro emulador WTK pegar os dados das coordenadas? Basta apenas eu ir na janelinha MIDlet -> External events qdo executa o emulador, e passar os dados lá?

Eu fiz isto e na hora de imprimir na tela a variável que supostamente tem os dados ele da erro e não executa nada.

Ou eu preciso de um GPS para capturar os dados e passar pro emulador? Como é feita exatamente esta interação?

Lembrando que eu coloquei no meu projeto as configurações pra rodar a API Location.

Se alguem tiver ae um código funcional e puder me passar eu agradeço.

Preciso fazer isto funcionar meio logo, fim do mês tenho que entregar este projeto, e eu ainda nem comecei… to parado por causa dessa dúvida.

Obrigado.

Código:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.location.*;

public class LocationTeste extends MIDlet implements CommandListener {
	// criação do comando sair
	private Display 		       display;
	private Command			   cmExit;
	private Form				f;
	private Criteria                        c;
	
	public LocationTeste()
	{
		display = Display.getDisplay(this);
		Command cmExit = new Command("Sair",Command.EXIT,0);
		// criação do formulário com titulo
		Form f=new Form("Esperando...");
		// subtitulo
		f.append("Procurando por localização...");
		// adiciona comando ao formulário
		f.addCommand(cmExit);				
		// gerenciador de comandos
		f.setCommandListener(this);
		
		localizaLatLong();
	}
	
	public void startApp()
	{
		display.setCurrent(f);
	}

	public void localizaLatLong() {
	try {
		// obtêm uma instancia um criteria
		Criteria c=new Criteria();		
		// Precisão de 1000m horizontalmente e verticalmente
		c.setHorizontalAccuracy(1000);
		c.setVerticalAccuracy(1000);
		// ajusta o nível máximo preferido do consumo de potência (pouco uso)
		c.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW);
		// obtêm uma instância da classe Location
		LocationProvider lp=LocationProvider.getInstance(c);
		// pega a localização com tempo limite de 60s
		Location loc=lp.getLocation(60);
		// obtêm uma instancia um Qualified Coordinates que representa as coordenadas
		QualifiedCoordinates qc=loc.getQualifiedCoordinates();
		// uso das informações de coordenadas, vincula (exibição) ao formulario (display)
		// Caso haja coordenadas de localização
		if(qc != null ) {
		// obtêm a altura				
		f.append("Altura: "+qc.getAltitude());	
	        // desta linha o código não passa
		System.out.println("Altura: " + qc.getAltitude());
		// obtêm a latitude		
		f.append("Latitude: "+qc.getLatitude());
		System.out.println("Latitude: " + qc.getLatitude());
		// obtêm a longitude
		f.append("Longitude: "+qc.getLongitude());
		System.out.println("Longitude: " + qc.getLongitude());
		}
		// tratamento de erro,
	} catch(Exception e) {
		f.append("Exception: "+e);
		}
	}
	
// função orbigatoria do midlet (pausa)
public void pauseApp() {}
// função orbigatoria do midlet (saida)
public void destroyApp(boolean destroy) {}
// gerenciador de ação (comando)

	public void commandAction(Command c, Displayable s)
	{
		if (c == cmExit)
		{
			destroyApp(false);
			notifyDestroyed();
		}
	}
}

Erro:

java.lang.NullPointerException
	at LocationTeste.localizaLatLong(+257)
	at LocationTeste.<init>(+56)
	at java.lang.Class.runCustomCode(+0)
	at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
	at com.sun.midp.midlet.Selector.run(+22)

Na hora de imprimir na tela as coordenadas da o erro

achei o erro, descobri que meu código estava errado… veja só

troquei a linha

Form f=new Form(“Esperando…”);

por

f=new Form(“Esperando…”);

pq eu já tinha declarado ela nos atributos, e funcionou perfeitamente!

na hora que eu executo o MIDlet tem um menuzinho em cima do emulador, e lá vc coloca dos dados da latitude, longitude, altutide, etc…

na pratica… o celular teria que ter essa API Location disponivel ??? ou qualquer celular utiliza-la se adicionado na lá IDE ? ou isso é só para celulares sofisticados?

e no caso do GPS… nem sei se se chama assim, mas, tem algum servidor de GPS grátis ??

[quote=“edprado”]na pratica… o celular teria que ter essa API Location disponivel ??? ou qualquer celular utiliza-la se adicionado na lá IDE ? ou isso é só para celulares sofisticados?

e no caso do GPS… nem sei se se chama assim, mas, tem algum servidor de GPS grátis ??[/quote]

Sim, o celular precisa da API Location pra funcionar.

Servidor de GPS?? Como assim?

eu penso assim…

onde tenho que conectar pra pegar as informações de um determinado mapa de uma determinada região???

eu pensava que teria que conectar em um servidor de GPS(local onde pego as informações de mapa, etc)

eh assim q funciona ???

a prórpia api location não tem suporte a mapas, deve usar um servlet ou atualmente pode usar os mapas do Google Maps, Yahoo! Maps, Windows Live Local
Não é bem um servidor GPS e sim um provedor de localização (ex aparelho GPS). que apenas disponibiliza as coordenadas geográficas.

abraço

o edprado –

O API de localização de J2ME têm um problema – ele diz que tem toda essa funcionalidade de “PointsOfInterest” é o demais, mais os poucos operadores que tem habilitado o API não têm habilitado essa parte do API. Então, eu somente me confiaria na informação de coordenadas.

Dois termos te vão servir:
GPS é “Geographic Positioning System”, a constelação de satélites que permitem que saiba onde é o seu aparelho – com o GPS, pode receber a latitude e a longitude do aparelho.

O que você precisa além do GPS é um sistema de GIS (Geographic Information System) que possa traduzir essas coordenadas em informação (mapas, pontos de interesse, etc.).

Têm vários fornecedores que tem bons dados:

De qual rede é o seu celular?

um abraço,

Juan Felipe