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.
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
Cara o código que você fez, provavelmente está certo, porém ele roda apenas em um celular que tenha um GPS imbutido.
Se quiser fazer algo funcional, procure fazer o seu projeto acoplando um GPS em um celular, e pegar os dados pela porta serial, ou sei lá qual a conexão estiver usando entre os dois equipamentos.
Pra voce ver o seu código funcionando, baixe o emulador da nokia pra 3rd Edition do séries 60. Vai rodar sem esses erros.
Não vai te mostrar nada, mas pelo menos vc sabe que o seu código está certo. rs
Nesta janelinha que eu te falei vc coloca os dados das coordenadas pra MIDlet “simular” um GPS. É só vc preencher os campos Latitude, Longitude, Altitude… deve ter outros tbm… vc preenche só oq quer usar, dai a MIDlet vai ler estes dados e imprimir na tela, conforme o código que eu postei acima. Sacou?
Agora estou tentando fazer uma conexão com um Servlet, pra passar estes dados como parametro e me retornar um ponto previamente cadastrado num banco de dados mais proximo de onde estou!
Eu tava fazendo um projeto parecido do uso da API location c/ GPS e servlets -> GPS, LBS e J2ME (integração de tecnbologias)http://www.guj.com.br/posts/list/40865.java só que ainda ñ testei, to tentando fazer um projeto também utilizando algoritmos com logica fuzzy p/ melhorar a precisão dos dados do GPS e ainda tenho q por nesse código a parte do uso do landmark
Peguei o codigo do Nand0 fiz a correção que ele menciona e joguei no eclipse.
a Versão do Eclipse é Version: 3.3.0
e a versão Toolkit é 2.5.1
quando compilo o codigo da o seguinte mensagen.
Running with storage root MediaControlSkin
Running with locale: Portuguese_Brazil.1252
Running in the identified_third_party security domain
java.lang.ClassNotFoundException: LocationTeste
at com.sun.midp.midlet.MIDletState.createMIDlet(+29)
at com.sun.midp.midlet.Scheduler.schedule(+52)
at com.sun.midp.main.Main.runLocalClass(+28 )
at com.sun.midp.main.Main.main(+80)
Execution completed.
3386970 bytecodes executed
12 thread switches
1667 classes in the system (including system classes)
17566 dynamic objects allocated (521028 bytes)
1 garbage collections (0 bytes collected)