Статьи

Расположение Android с Google Maps — Часть 1

1. Требования: что мы хотим?

Допустим, мы хотим создать приложение, которое отображает местоположение телефона на карте, а также другие интересные вещи, такие как возможность отправить местоположение по SMS или электронной почте контактам, просто нажав на экран (например). Для этого нам нужно несколько вещей:

  1. Возможность доступа к службам определения местоположения телефона
  2. Визуальное  отображение местоположения телефона на карте
  3. Способность реагировать на изменения местоположения и соответственно обновлять карту
  4. Возможность наложения элементов поверх карты, таких как значки, диалоги или другие интерактивные элементы

2. Инструменты и API: что у нас есть?

 

Android обеспечивает доступ к службам определения местоположения телефона с помощью LocationManager в пакете android.location . API предоставляет некоторый уровень полезной информации, такой как:

 // Get a reference to the system Location Manager via the app context
 LocationManager locManager = 
      (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

// 1. LIST OF PROVIDERS (Network, GPS, etc..)
 List providers =  locManager.getAllProviders();

// 2. BEST PROVIDER using some Criteria. here, the default
String bestProvider = locManager.getBestProvider(new Criteria(), false);

// 3. LAST KNOWN LOCATION
Location lastKnown = locManager.getLastKnownLocation(bestProvider);
String display = new StringBuilder()
      .append("latitude: ").append(lastKnown.getLatitude())
      .append("\nLongitude: ").append(lastKnown.getLongitude())
      .append("\nAltitude: ") .append(lastKnown.getAltitude())
      .append("\nAccuracy: ").append(lastKnown.getAccuracy())
      .append("\nBearing: ").append(lastKnown.getBearing())
      .append("\nSpeed: ").append(lastKnown.getSpeed())
      .toString();
// show display on screen
//...

И это хорошо … если тебе нравятся цифры. Но чтобы на самом деле показать местоположение на карте, нам нужна внешняя библиотека, такая как Google Maps . И чтобы использовать это, нам нужно сделать пару вещей:

Как только мы сделаем вышеупомянутое (и это относительно безболезненно), мы можем начать создавать простое приложение, которое отображает наше местоположение на карте. Так что это заботится о требованиях 1 и 2 выше.

Третье требование, т. Е. Возможность обновления местоположения телефона, обеспечивается путем реализации одного или нескольких методов обратного вызова android.location.LocationListener : 

public void onLocationChanged(Location location) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}

Наконец, наше четвертое требование будет удовлетворено за счет расширения Overlay , OverlayItem или ItemizedOverlay на Картах Google . Последний предоставляет нам список элементов, которые мы могли бы захотеть наложить поверх нашей карты. В частности, нас заинтересует следующий метод:

protected boolean onTap(int index){}

… так как мы хотим, чтобы пользователь получил некоторые дополнительные функции, нажав его / ее местоположение на карте. Вот и все. Теперь, когда у нас есть все, что нам нужно, чтобы начать разработку и кодирование нашего приложения.

 

3. Дизайн приложения

 

На первый взгляд нам понадобятся три класса, каждый со своими обязанностями:

  1. Пользовательский интерфейс, то есть класс Android Activity, расширяющий Google Maps MapActivity :   LocatorActivity
  2. Класс процессора, который будет заботиться обо всей логике на основе местоположения и, в частности, реагировать на обновления местоположения:   Locator
  3. Класс Overlay, который будет фокусироваться на элементах, отображаемых в верхней части карты:   LocatorOverlay

Нам может потребоваться больше, чем выше, поскольку мы более глубоко погружаемся в нашу реализацию, но помните, что мы гибки, поэтому мы всегда можем вернуться и изменить наш оригинальный дизайн. Это наша (упрощенная) диаграмма классов UML:

 

Мы начнем с реализации в части 2 , начиная с класса самого низкого уровня, то есть LocatorOverlay .

Из  блога Тони .