1. Требования: что мы хотим?
Допустим, мы хотим создать приложение, которое отображает местоположение телефона на карте, а также другие интересные вещи, такие как возможность отправить местоположение по SMS или электронной почте контактам, просто нажав на экран (например). Для этого нам нужно несколько вещей:
- Возможность доступа к службам определения местоположения телефона
- Визуальное отображение местоположения телефона на карте
- Способность реагировать на изменения местоположения и соответственно обновлять карту
- Возможность наложения элементов поверх карты, таких как значки, диалоги или другие интерактивные элементы
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 . И чтобы использовать это, нам нужно сделать пару вещей:
- Загрузите его через SDK Manager
- Получить ключ API Карт
Как только мы сделаем вышеупомянутое (и это относительно безболезненно), мы можем начать создавать простое приложение, которое отображает наше местоположение на карте. Так что это заботится о требованиях 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. Дизайн приложения
На первый взгляд нам понадобятся три класса, каждый со своими обязанностями:
- Пользовательский интерфейс, то есть класс Android Activity, расширяющий Google Maps MapActivity : LocatorActivity
- Класс процессора, который будет заботиться обо всей логике на основе местоположения и, в частности, реагировать на обновления местоположения: Locator
- Класс Overlay, который будет фокусироваться на элементах, отображаемых в верхней части карты: LocatorOverlay
Нам может потребоваться больше, чем выше, поскольку мы более глубоко погружаемся в нашу реализацию, но помните, что мы гибки, поэтому мы всегда можем вернуться и изменить наш оригинальный дизайн. Это наша (упрощенная) диаграмма классов UML:
Мы начнем с реализации в части 2 , начиная с класса самого низкого уровня, то есть LocatorOverlay .
Из блога Тони .