Используйте Google Map в приложении Blackberry


Может ли кто-нибудь сказать мне, как использовать Google maps в разработке приложений blackberry вместо Blackberry map?

3 6

3 ответа:

Недавно у меня появилась идея использовать сайт Google Maps из браузера .Поле но это невозможно, так как Gmap основаны на JavaScript и плохо поддерживаются браузером Blackberry native.

На самом деле есть 2 способа использования Google Maps на Blackberry:

Вот небольшой пример:

Форма для просмотра статического изображения 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);
        }
    }

}

Класс inet класс для загрузки статического изображения:

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());
            }
        }
    }
}

Действие кнопки, запускающее загрузку, и действие обратного вызова, загружающее форму для просмотра изображения

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();           
       } 
    }

Уточняйте и редактируйте код, чтобы он соответствовал вашим потребностям. Мне потребовалось некоторое время, чтобы все исправить.

Теперь можно использовать Google Maps Вместо Карт BlackBerry с нашими собственными данными, как на картинке. Введите описание изображения здесь

Если вы хотите использовать google maps для отображения своих собственных местоположений / маркеров, вы можете вызвать google maps с помощью ApplicationDescriptor из вашего приложения. Проверьте наличие Google maps на устройстве с помощью CodeModuleManager.getModuleHandle("GoogleMaps"); он возвращает целое число, где ненулевое означает, что он доступен. Затем вы можете добавить местоположения в свой файл KML, вы даже можете настроить указатели местоположения, используя теги файлов KML.

пример as linked by Max позволяет использовать только один маркер. Таким образом, файл KML становится необходимым, если необходимо добавить несколько маркеров.

Вы можете посмотреть на простой учебник здесь для начинающих.