Witam.
Próbuję napisać program w J2ME pod WM 6.5 (konkretnie HTC Leo) do lokalizacji pozycji z wbudowanego odbiornika GPS. Problem polega na tym, że WM nie wspiera pakietu Javy JSR 179 odpowiadającej za API lokalizacji. Czy znacie może jakiś sposób na dołączenie tej paczki do środowiska WM (emulator Javy JBlend). Jeśli nie to czy istnieje jakiś inny sposób na komunikację z wbudowanym odbiornikiem GPS w J2ME?
Wiem, że można by to zrobić w C#, ale póki co jeszcze nic nie pisałem w tym języku, poza tym J2ME była by bardziej uniwersalna.
Poniżej zamieszczam podstawowy kod który wykorzystuję do odczytania długości i szerokości geograficznej z odbiornika GPS. Działa on na pewno z nokią 5230, ale zapewne również z innymi urządzeniami opartymi o symbiana, gdyż ten ma dołączony pakiet JSR 179.
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.location.*;
public class GPS_Speedometer extends MIDlet implements CommandListener {
private Form mMainForm;
private StringItem message;
public GPS_Speedometer() {
message = new StringItem("",""); //wiadomość tekstowa wyświetlana na formularzu (dla pozycji GPS)
Retriever ret = new Retriever(this); //inicjalizacja wątku odbiornika GPS
ret.start();
mMainForm = new Form("GPS Speedometer");
mMainForm.append(new StringItem(null, "GPS Speedometer!\n"));
mMainForm.append(message);
mMainForm.addCommand(new Command("Wyjście", Command.EXIT, 0));
mMainForm.setCommandListener(this);
}
public void startApp() {
Display.getDisplay(this).setCurrent(mMainForm);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable s) {
notifyDestroyed();
}
public void displayString(String string) {
message.setText(string);
}
class Retriever extends Thread { //wątek pobierający współrzedne lokalizacji
private GPS_Speedometer midlet;
public Retriever(GPS_Speedometer midlet) {
this.midlet = midlet;
}
public void run() {
try
{
while (true){
checkLocation();
Thread.sleep(5000); // refresh in 5 second period
}
}
catch (Exception ex)
{
ex.printStackTrace();
midlet.displayString(ex.toString());
}
}
public void checkLocation() throws Exception {
String string;
Location location;
LocationProvider location_provider;
Coordinates c;
Criteria cr = new Criteria();
cr.setHorizontalAccuracy(500);
location_provider = LocationProvider.getInstance(cr);
location = location_provider.getLocation(60);
c = location.getQualifiedCoordinates();
if(c != null ) {
double lat = c.getLatitude();
double lon = c.getLongitude();
double alt = c.getAltitude();
string = "\nSzerokość: " + lat + "\nDługość: " + lon + "\nWysokość: " + alt;
} else {
string ="Błąd ustalania pozycji.";
}
midlet.displayString(string);
}
}
}
Będę niezmiernie wdzięczny za wszelką pomoc i sugestie.
Pozdrawiam