Сегодня я хочу вам рассказать как правильно работать с картами в Android, это может показаться непростым занятием, но на деле это в принципе довольно просто, тут в уроке я рассмотрю от создания простого приложения в котором будет только карта и закончу приложением в котором мы будем выводить графические элементы на карте и находить текущее местоположение. Начнем мы конечно же с простого и создадим приложение в котором мы будем выводить на экран карту, но для этого нам нужно сгенерировать ключ что бы наша карта могла выводиться на экране телефона, чем мы сейчас и займемся.
1. Создание ключа и подготовка работы с картой
Для начала создаем проект в Eclipse — File — New Android Project. Дальше переходим на сайте гуглаdevelopers.google.com/android/maps-api-signup?hl=ru на котором видим формочку ввода md5 ключа, его мы сгенерируем у себя на компьютере с помощью командной строки. Запускаем CMD, «Пуск — Выполнить — cmd» в адресной строке пишем вот такую красоту
c:\<<b>path-to-jdk-dir</b>>\bin\keytool.exe -list -alias androiddebugkey -keystore "C:\users\<user-name>\.android\debug.keystore" -storepass android -keypass android
где path-to-jdk-dir — это путь к вашему jdk, у меня оно находится по адресу C:\Program Files\Java\jdk1.7.0_07.
user-name — имя вашего пользователя компьютера.
далее вбиваем туда же в консоль
keytool.exe -list -alias androiddebugkey -keystore "C:\users\ravi\.android\debug.keystore" -storepass android -keypass android
C:\users\ravi\.android\debug.keystore — может быть другой, у меня например вот такой: C:\Users\Admin\.android\debug.keystore
Должно выглядеть все это так:
Далее вставляем на сайте который я вам дал адрес наш md5 код и получаем ключ для открытия карты в андроиде:
После нажатия на кнопку генерировать вы получите вот такое:
Если MapActivity не импортируется само тогда вам нужно в папку libs/ засунуть http://dl.dropbox.com/u/61086119/maps.jar, его можно найти в папке android-sdk в папке libs любого проекта, но я вам упрощу жизнь...
2. Создание карты и её вывод на экран
Теперь открываем наш main.xml и вставляем код в нашу вьюшку MapView. Выглядеть оно все будет вот так:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:apiKey="05M-7qOGbEjYduPPUdQgJt9ysL8HToawGdvu_ow"
/>
Дальше открываем MainActivity и наследуем её от MapActivity для того что бы наши объекты и классы которые мы дальше будем использовать импортировались без всяких проблем, ну и конечно для того что бы мы могли работать с картой. Пишем вот такое:
MainActivity.java
import android.os.Bundle;
import com.google.android.maps.MapActivity;
public class AndroidGoogleMapsActivity extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
Теперь запускаем проект и вуаля! у нас запустилась карта. Выглядеть все что вы сделали будет вот так:
3. Добавление увеличения / уменьшения карты
Для того что бы увеличивать и уменьшать карту нужно добавить элемент ZoomControls или ZoomButtons в нашу xml разметку, в нашем случае это main.xml и написать в MainActivity в onCreate() следующие строки:
// Displaying Zooming controls
MapView mapView = (MapView) findViewById(R.id.mapView); //определяем карту
mapView.setBuiltInZoomControls(true);
// задаем уменьшение и увеличение карты
4. Выбор типа карты
Для создания типа карты можете создать например меню или кнопки на карте которые будут вызывать один из этих методов:
mapView.setSatellite(true); // Satellite View
mapView.setStreetView(true); // Street View
mapView.setTraffic(true); // Traffic View
Пишутся они так же в onCreate(), в месте где вы захотите, например при нажатии кнопки, текствьюшки или при выборе элемента в меню.
5. Добавление маркера на карту.
Для добавления маркера на карту нам понадобиться создать кнопку по которой мы будем выводить маркер по заданным координатам.
Значит создаем кнопку в main.xml, надеюсь мне не нужно писать как создавать кнопки, и большинство знает как это делается, далее в MainActivity.java в onCreate() создаем листенера этой кнопки и внутри onClick() пишем следующий код:
String provider;
LocationManager locationManager;
//......
//задаем координаты
GeoPoint myLication = new GeoPoint((int) latitude, (int) longitude); // перемещаемся туда при помощи данной функции, mc - объект типа MapController
mc.animateTo(myLication); // рисуем картинку на экране
Drawable makerDefault = getResources().getDrawable(R.drawable.pushpin); //выводим маркер на карте
MirItemizedOverlay itemizedOverlay = new MirItemizedOverlay(makerDefault); //задаем координаты маркеру
itemizedOverlay.addOverlayItem((int) latitude, (int) longitude, "My Location");
//выводи картинку по заданным координатам
mapView.getOverlays().add(itemizedOverlay);
//перемещаемся к центру экрана
mc.setCenter(new GeoPoint((int) latitude, (int) longitude));
latitude — широта, например 34159000.
longitude — долгота, например 73220000.
Если вы вставите эти параметры в геопоинт то наш маркет выведется где-то примерно в Азербайджане.
pushpin — наша картинка которую мы будем выводить на экране, на карте.
6. Нахождение местоположения пользователя при помощи GPS
Тут все довольно просто, использовать мы будем тот же код что и на один пункт выше, только с дополнительной вставкой определения местоположения, для этого нам нужно имплементировать нашей Activity дополнительный класс LocationListener вот так:
public class MainActivity extends MapActivity implements LocationListener {...}
А внутри всего этого создаем отдельный метод в который записываем наш код для определения местоположения.
String provider;
LocationManager locationManager;
//......
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
//проверка на пустоту провайдера
if ((provider != null) && !provider.equals("")) {
//определяем местоположение
Location location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 20000, 1, this);
if (location != null) {
//задаем координаты
GeoPoint myLication = new GeoPoint((int) latitude, (int) longitude);
// перемещаемся туда при помощи данной функции mc - MapController
mc.animateTo(myLication);
// рисуем картинку на экране
Drawable makerDefault = getResources().getDrawable(R.drawable.pushpin);
//выводим маркер на карте
MirItemizedOverlay itemizedOverlay = new MirItemizedOverlay(makerDefault);
//задаем координаты маркеру
itemizedOverlay.addOverlayItem((int) latitude, (int) longitude, "My Location");
//выводи картинку по заданным координатам
mapView.getOverlays().add(itemizedOverlay);
//перемещаемся к центру экрана
mc.setCenter(new GeoPoint((int) latitude, (int) longitude));
} else {
Toast.makeText(getBaseContext(), "Location can't be retrieved", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
}
Ну и как последний штрих нам нужно добавить примишены для работы с GPS, для работы с интернетом, и для определения местоположения. Выше тэга пишем следующее:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ну и все, теперь запускаем приложение запускаем интернет запускаем GPS и запускаем программу, кстати если вы не сделали проверку на наличие интернета, по этому перед запуском программы включите интернет и жпс и тогда ни ошибок не будет, не должно быть (:
Все вопросы постим в комментариях, буду стараться отвечать по возможности.
не могли бы вы выложить полностью эту программу на файлообменике?
ОтветитьУдалитьДобавил исходники
УдалитьСпасибо большое очень помогли
Удалить