2009-09-07 7 views

Répondre

9

Récemment, j'ai eu une idée pour utiliser Google Maps website de Browser.Field mais ce n'est pas possible puisque GMaps sont basés sur JavaScript et qu'il est mal supporté par le navigateur natif Blackberry.

En fait, il y a 2 façons d'utiliser Google Maps sur Blackberry:

0

Voici un petit exemple:

Le formulaire pour afficher l'image statique Google Maps:

public class frmMap extends Form implements CommandListener { 

    Command _back; 
    MIDlet midlet; 
    Form dis; 

    public frmMap(String title, ImageItem img, MIDlet m, Form d){ 
     super(null); 

     this.midlet = m; 
     this.dis = d; 

     _back = new Command("Back", Command.BACK, 1); 
     addCommand(_back); 
     append(img); 
     setCommandListener(this);   
    } 

    public void commandAction(Command c, Displayable d) { 
     if(c == _back){ 
      Display.getDisplay(midlet).setCurrent(dis); 
     } 
    } 

} 

La classe INET de classe pour télécharger la statique image:

public class INETclass implements Runnable { 

    private String _location = null; 
    private HttpConnection inet; 
    private Pispaal _m; 
    public String url = null; 

    public INETclass(String location, Pispaal m){ 
     _location = location; 
     _m = m;   
    } 

    public void run() { 
     try 
     { 
      //Setup the connection 
      inet = (HttpConnection)Connector.open(url); 
      inet.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      int rc = inet.getResponseCode(); 

      //Responsecode controleren 
      if(rc == HttpConnection.HTTP_OK){ 
       //Open input stream to read the respone 
       DataInputStream is = new DataInputStream(inet.openInputStream());     
       StringBuffer sb = new StringBuffer(); 

       int ch; 
       long len = -1; 
       byte[] buffer = null; 
       if(_location == null){ 
        len = is.available(); 
       } 

       if(len != -1){ 
        if(_location == null){ 
         buffer = IOUtilities.streamToBytes(is); 
        }else{ 
         while((ch = is.read()) != -1){ 
          sb.append((char)ch); 
         } 
        } 
       } 
       is.close(); 

       if(_location == null){ 
        _m.OnINETComplete(buffer); 
       }else{ 
        _m.Alert(sb.toString()); 
       } 
      }else{ 
       _m.Alert("URL " + url + " geeft response code: " + rc); 
       try 
       { 
        inet.close(); 
       }catch(Exception e){ 
        _m.Alert("Error: " + e.getMessage()); 
       } 
      } 

     } 
     catch(Exception e) 
     { 
      _m.Alert("Error: " + e.getMessage()); 
      System.out.println("Error: " + e.getMessage()); 
     } 
     finally 
     { 
      try 
      { 
       if(inet != null){ inet.close(); } 
       Thread.currentThread().join(); //Making sure this thread dies 
      }catch(Exception e){ 
       _m.Alert("Error: " + e.getMessage()); 
       System.out.println("Error: " + e.getMessage()); 
      } 
     } 
    } 
} 

L'action Button qui lance le téléchargement et l'action de rappel qui charge le formulaire pour voir l'image

public void commandAction(Command c, Displayable d) { 
     synchronized(c){ 
      String loc = _location.getText(); 
      if(loc.indexOf(",") > 0){ 
       //if(c == _strCommand){     
        //INETclass inet = new INETclass(loc, this); 
        //Thread tInet = new Thread(inet); 
        //tInet.start(); 
        //Alert("Locatie word doorgestuurd. Even geduld"); 
       //}else 
       if(c == _mapView){ 
        INETclass inet = new INETclass(null, this); 
        inet.url = "http://www.qeueq.com/gmap.php?location=" + this.lat + "," + this.lon + "&size=" + this.width + "x" + this.height + ";deviceside=true"; 
        Thread tInet = new Thread(inet); 
        tInet.start(); 
       } 
      }else{ 
       Alert("GPS locatie is nog niet beschikbaar."); 
      } 
     } 
    } 

public void UpdateLocation(double lat, double lon){ 
     String location = lat + "," + lon; 
     this.lat = lat; 
     this.lon = lon; 
     synchronized(location){ 
      _location.setText(location); 
      INETclass inet = new INETclass(location, this); 
      Thread tInet = new Thread(inet); 
      tInet.start();   
     } 
    } 

Affinez et éditez le code afin qu'il corresponde à vos besoins. Il m'a fallu du temps pour bien faire les choses.

0

Il est maintenant possible d'utiliser Google Maps au lieu de cartes BlackBerry avec nos propres données comme dans l'image. enter image description here

Si vous souhaitez utiliser google maps pour afficher vos propres emplacements/marqueurs, vous pouvez utiliser google maps en utilisant ApplicationDescriptor depuis votre application. Vérifiez les cartes google sur l'appareil en utilisant CodeModuleManager.getModuleHandle("GoogleMaps"); il renvoie un entier où non nul signifie qu'il est disponible. Ensuite, vous pouvez ajouter des emplacements dans votre fichier KML, vous pouvez même personnaliser les pointeurs d'emplacement en utilisant des balises de fichier KML.

Le example comme liée par Max permet à un seul seul marqueur. Un fichier KML devient donc nécessaire si plusieurs marqueurs doivent être ajoutés.

Vous pouvez regarder le tutoriel simple here pour les débutants.

Questions connexes