Google Maps API позволяет добавлять в Android приложения возможность работы с картами Google. Чтобы подключить карты к вашему проекту, вам необходимо выполнить следующие шаги:
- Создать новый проект Android на базе библиотек Google API;
- Создать новый Android Virtual Device - c возможностью работы с Google API;
- Получить Map API Key;
- Подключить к проекту необходимые библиотеки и использовать классы Google Maps.
Шаг первый:
Запустите Eclipse, создайте новый Android Project, можете назвать его HelloMap, и в поле Build Target выберете Google APIs. Если у вас в Build Target нет Google APIs, значит у вас не установлен пакет с данным API. Пройдите Windows->Android SDK and AVD Manager->Installed Pakages, нажмите Update All... и установите пакет с Google API.
Шаг второй:
Теперь нужно создать Android Virtual Device который имеет возможность работы с Google API. Пройдите Windows->Android SDK and AVD Manager->Virtual Devices. Нажмите New и в поле Target выберете Google APIs. Теперь можете запустите созданный эмулятор.
Шаг третий:
Получение Map API Key. Для того чтобы иметь возможность отображать Google карты, вам необходимо использовать бесплатный Google Map API Key. Чтобы получить ключ необходимо выполнить следующие шаги:
- Найдите файл debug.keystore, он располагается в папке "C:\Documents and Settings\<User Name>\.android". Скопируйте данный файл в папку C:\(к примеру можете создать папку Android "C:\Android").
- Из данного keystore необходимо получить MD5 код. Для этого используйте утилиту keytool.exe которая поставляется вместе с JDK и располагается в папке "C:\Program Files\Java\<jdk using version>\bin".
- Запустите командную строку Пуск->Все программы->стандартные->командная строка. Перейдите в папку с keytool ("cd C:\Program Files\Java\<jdk uses version>\bin") и выполните следующую команду:
- Скопируйте полученный MD5 и пройдите по ссылке http://code.google.com/intl/ru-RU/android/maps-api-signup.html. Следуйте инструкциям и получите свой API Key.
keytool.exe -list -alias androiddebugkey -keystore "C:\android\debug.keystore" -storepass android -keypass androidПосле выполнения данный команды вы должны увидеть на экране свой MD5 код.
Шаг четвёртый:
Для того чтобы использовать Google Maps API необходимо подключить библиотеку для работы с картами <uses-library android:name="com.google.android.maps"> и так как наше приложение будет загружать карты через интернет нужно позволить ему работать с интернетом INTERNET permission.
Откройте AndroidManifest.xml и добавьте в него <uses-library> и INTERNET permission:
Отображение карты.
для того чтобы отобразить карты измените main.xml из папке res\layout. Вы должны использовать <com.google.android.maps.MapView> элемент, чтобы отобразить карту в вашем Activity.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="Ваш API Key"
/>
</RelativeLayout>
Теперь откройте HelloMap.Activity, данный класс должен быть унаследован от MapActivity. При наследовании от класса MapActivity необходимо переопределить метод isRoyteDisplayed():
package com.alukardev.hellomap2;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
public class HelloMapActivity extends MapActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
Всё готово! Теперь можете запустить проект и посмотреть результат.
Масштабирование.
Добавим в наш проект возможность масштабировать карту.
Откройте main.xml и добавьте в него <LinearLayout>:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="0oJHawmPUco4Y2eJDV8r5cKv4kUseLVglm4-e0g"
/>
<LinearLayout android:id="@+id/zoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
/>
</RelativeLayout><LinearLayout> элемент нужен чтобы отобразить на нем кнопки масштабирования.Теперь откройте HelloMapActivity.java. Импортируйте следующие библиотеки:
import com.google.android.maps.MapView.LayoutParams; import android.view.View; import android.widget.LinearLayout;Добавьте следующий код после строчки setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
Файл HelloMapActivity.java полностью:
package com.alukardev.hellomap2;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
import com.google.android.maps.MapView.LayoutParams;
import android.view.View;
import android.widget.LinearLayout;
public class HelloMapActivity extends MapActivity
{
MapView mapView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
Теперь можете запустить проект и посмотреть результат.
В качестве альтернативного решения можно использовать клавиши для масштабирования, для этого нужно вызывать методы zoomIn() и zoouOut() класса MapController:
package com.alukardev.hellomap2;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import android.os.Bundle;
import com.google.android.maps.MapView.LayoutParams;
import android.view.KeyEvent;
import android.view.View;
import android.widget.LinearLayout;
public class HelloMapActivity extends MapActivity
{
MapView mapView;
public boolean onKeyDown(int keyCode, KeyEvent event)
{
MapController mc = mapView.getController();
switch (keyCode)
{
case KeyEvent.KEYCODE_3:
mc.zoomIn();
break;
case KeyEvent.KEYCODE_1:
mc.zoomOut();
break;
}
return super.onKeyDown(keyCode, event);
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}



Полезно для новичка. Спасибо большое !!!
ОтветитьУдалитьсделал один в один, но почему-то отображается не карта а пустые клетки
ОтветитьУдалитьвот этого в манифесте не хватало
ОтветитьУдалитьЧего не хватало в манифесте?
Удалитьооо, спасибо!!!
ОтветитьУдалитьСамые большие проблемы у меня вызвало генерация ключа - генерировал как-то по англ. туториалам - нигде такого как у тебя не встречал подхода.
Уважаемый автор! Подскажите пожалуйста, как сделать так, чтобы при запуске программы открывалась локация, в которой находится девайс или виртуальная машита, с которой программа была запущена?
ОтветитьУдалитьУ меня вообще ничего не отображается, выдаёт ошибку
ОтветитьУдалитьInstallation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY
[2012-11-09 20:39:31 - MapActivity] Please check logcat output for more details.
[2012-11-09 20:39:31 - MapActivity] Launch canceled!.
Вот код манифеста:
Остальное сделано в точности по инструкции.
ПОМОГИТЕ, ПОЖАЛУЙСТА!!!
"Теперь откройте HelloMap.Activity, данный класс должен быть унаследован от MapActivity. При наследовании от класса MapActivity необходимо переопределить метод isRoyteDisplayed():"
ОтветитьУдалитьНе могу найти, помогите)