В первой части мы разработали упрощенную диаграмму классов UML, которая поможет нам в процессе разработки. Затем мы реализовали LocatorOverlay и Locator в части 2 и части 3 соответственно.
В последней части этой серии мы рассмотрим пользовательский интерфейс LocatorActivity и начнем с включения фрагмента MapView в наш XML-макет с помощью ключа API Карт Google, который мы упоминали в части 1:
<com.google.android.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:enabled="true" android:apiKey="insert-your-map-key-here" />
Теперь нам нужно Activity, которая отображает MapView. Google Maps предоставляет
MapActivity с методами жизненного цикла, которые заботятся о потоках картографического сервиса и рендеринге для нас:
// package statement and other imports here ... import com.google.android.maps.MapActivity; import com.google.android.maps.MapView; /** * A Google map activity with zoom controls * displaying the handset's location point * with the default provider (i.e. network) accuracy. **/ public class LocatorActivity extends MapActivity { private Locator locator; /** A View from the Google Maps service.*/ private MapView mapView; // Lifecycle methods ............... /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapview); // enable the built-in zoom controls mapView.setBuiltInZoomControls(true); // start location services locator = new Locator(this, mapView, null); } /** Register for the updates when Activity is in foreground */ @Override protected void onResume() { super.onResume(); locator.requestUpdates(); } /** Stop the updates when Activity is paused * since tracking location is costly on the device's battery and CPU. * */ @Override protected void onPause() { super.onPause(); locator.removeUpdates(); } // MapActivity accounting info ............... /** * Whether or not we are displaying any kind of route information, * such as a set of driving directions. * */ @Override protected boolean isRouteDisplayed() { return false; } @Override protected boolean isLocationDisplayed() { return true; } }
В последнем разделе выше есть два метода в MapActivity, которые Google Maps использует для целей бухгалтерского учета, и которые нам необходимо реализовать для соответствия условиям использования:
- isLocationDisplayed ()
- isRouteDisplayed ()
Поэтому нам нужно сообщить Google Maps, реализуем ли мы какие-либо из них.
И последнее, но не менее важное: нам нужно объявить об использовании библиотеки карт и запросить соответствующие разрешения в нашем файле манифеста Android
:
... <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> ... <application...> ... <uses-library android:name="com.google.android.maps" /> </application>
И … мы закончили. Пришло время увидеть результаты наших усилий. Вот изображение с уровнем детализации масштаба 16, установленным по умолчанию ранее в нашем классе Locator , откуда мы можем увеличивать и уменьшать масштаб, касаясь экрана, поскольку ранее мы включили встроенные элементы управления масштабированием в коде:
И наша главная особенность, то есть возможность отправлять наше местоположение с помощью SMS на наши контакты, нажав на точку нашего местоположения на карте:
Как только мы решим отправить местоположение, наша программа SMS (или список, если у нас установлено несколько) появится с текстом нашего местоположения, здесь URL-адрес местоположения. Второй снимок экрана — это визуализация нашего местоположения получателями SMS, когда они открывают ссылку в своем браузере:
Теперь мы внедрили базовое приложение для Android с помощью Google Maps, которое сообщает о нашем местоположении с помощью SMS.
Из блога Тони .