понедельник, 4 ноября 2013 г.

Delphi XE5 iOS и Android, одна строчка кода - Map My Location

Michael Swindell поставил перед нами задачу создания мобильного приложения с помощью Delphi xe5 для iOS и Android, используя при этом только одну строчку кода. Подумав об этом некоторое время, вот моё первое приложение с одной строчкой кода, "Map My Location". Это приложение использует компоненты TLocationSensor, TToolBar, TLabel и TWebBrowser для создания Android и iOS приложения, которое отображает карты Google с моим текущим местоположением.

upd (20.04.2014). Добавил информацию о разрешениях.


Чтобы начать этот проект, запускаем Delphi XE5 и создаём новый проект, используя меню "File | New | FireMonkey Mobile Application - Delphi".
Выбираем шаблон "Blank Application". На пустой форме добавляем компонент "TToolBar" и устанавливаем свойство "Align: alTop". Добавляем компонент "TLabel" к "TToolBar" и устанавливаем свойства "Text: Map My Location; TextAlign: taCenter; Align: taCenter";. Далее добавляем компонент "TWebBrowser" на форму и устанавливаем свойство "Align: alClient;" (компонент заполнит оставшуюся часть клиентской области формы). Размещаем компонент "TLocationSensor" на форме, он позволит получать координаты широты и долготы от датчика GPS, ставим свойство "Active: True;" (при запуске приложение сразу начнёт определять координаты).



Создаем обработчик события "OnLocationChanged" для "TLocationSensor" и добавляем одну строчку кода:
procedure TForm1.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D);
begin
  WebBrowser1.Navigate(
    Format(
      'https://maps.google.com/maps?q=%s,%s&output=embed',
      [NewLocation.Latitude.ToString, NewLocation.Longitude.ToString]
    )
  );
end;

В этой строке кода мы получаем широту (NewLocation.Latitude) и долготу(NewLocation.Longitude), преобразуем в строки (используя функцию ToString) и вводим оба значения в строку с помощью функции Format, после чего передаём полученную строку в TWebBrowser.Navigate.


Необходимо также дать разрешение на использование GPS датчика и подключения к Интернету:
Заходим в меню «Project -> Optoins -> Uses Permissions» и ставим галочки напротив пунктов:
  • Access location extra commands
  • Access mock location
  • Internet
После всех действий получаем готовое приложение, которое можно запускать как на Android устройствах, так и на iOS устройствах. Ниже вы можете видеть примеры работы приложения на iPhone Apple, 4S и Samsung Galaxy S4.





p.s. Это вольный перевод статьи Delphi XE5 iOS and Android One Line of Code App - Map My Location (Автор: David Intersimone)

8 комментариев:

  1. Не работает Ваше приложение..сделал все точь в точь как написано..серый экран на эмуляторе..Может с эмулятором что не так..

    ОтветитьУдалить
  2. Хотя..эмулятор может и не эмулировать работу GPS..тогда в принципе все понятно..

    ОтветитьУдалить
  3. Чтоб Работало на устройстве не забудьте включить эту опцию (GPS) тут PROJECT>OPTIONS>USES PREMISSIONS 3 и 4 пункт ставим тру , там про location

    ОтветитьУдалить
    Ответы
    1. Спасибо. Совсем забыл про это написать, ситуацию сейчас исправлю :)

      Удалить
  4. как создать браузер для windows?
    когда выбираешь платформу windows кщмпонент webbrowser становится недоступным

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. народ помогите как включить GPS из своей программы на андроиде

    ОтветитьУдалить
  7. По событию LocationChanged страница должна каждый раз обновляться? А то чет у меня каждые 5сек она обновляется ничего толком не разглядишь. Как сделать чтобы изменялось мое положение на карте, а карта каждый раз не обновлялась.

    ОтветитьУдалить