Google Maps を使う

準備:Google APIs の追加

AndroidSDK Manager を起動し,以下の画面において Google APIs を追加する(全ての API レベルについて追加すると,インストールに時間がかかる.特定のバージョンのみに絞った方がよい)
f:id:ymuto109:20110324183015p:image
実行ログは以下のとおり:

Downloading Google APIs by Google Inc., Android API 11, revision 1
Installing Google APIs by Google Inc., Android API 11, revision 1
Installed Google APIs by Google Inc., Android API 11, revision 1
Downloading Google APIs by Google Inc., Android API 10, revision 1
Installing Google APIs by Google Inc., Android API 10, revision 1
Installed Google APIs by Google Inc., Android API 10, revision 1
Downloading Google APIs by Google Inc., Android API 9, revision 2
Installing Google APIs by Google Inc., Android API 9, revision 2
Installed Google APIs by Google Inc., Android API 9, revision 2
Downloading Google APIs by Google Inc., Android API 8, revision 2
Installing Google APIs by Google Inc., Android API 8, revision 2
Installed Google APIs by Google Inc., Android API 8, revision 2
Downloading Google APIs by Google Inc., Android API 7, revision 1
Installing Google APIs by Google Inc., Android API 7, revision 1
Installed Google APIs by Google Inc., Android API 7, revision 1
Downloading Google APIs by Google Inc., Android API 4, revision 2
Installing Google APIs by Google Inc., Android API 4, revision 2
Installed Google APIs by Google Inc., Android API 4, revision 2
Downloading Google APIs by Google Inc., Android API 3, revision 3
Installing Google APIs by Google Inc., Android API 3, revision 3
Installed Google APIs by Google Inc., Android API 3, revision 3
Updated ADB to support the USB devices declared in the SDK add-ons.
'adb kill-server' succeeded.
ADB: * daemon not running. starting it now on port 5037 *
'adb start-server' succeeded.
ADB: * daemon started successfully *

Project Buld Target の変更

Eclipse において Google API を参照するように変更する.具体的には,Project → Properties → Android → Google APIs(適当なバージョン)にチェックを入れる.(チェックボックスのすぐ下に "Android + Google APIs" と出ているから,たぶん大丈夫)
f:id:ymuto109:20110324191613p:image
なお,プロジェクトの新規作成時に "Android + Google APIs" を指定してもよい.

AndroidManifest.xml の編集

インターネットにアクセスするため,パーミッションの設定を "android.permission.INTERNET" とする.また,Google Maps のクラス MapView を利用するため,"com.google.android.maps" をライブラリとして追加する.

AndroidManifest.xml(パーミッション&ライブラリ設定前)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="jp.hews.hellomap"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HelloMapActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

AndroidManifest.xml(パーミッション&ライブラリ設定後)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="jp.hews.hellomap"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HelloMapActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
		<uses-library android:name="com.google.android.maps"></uses-library>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

以上は manifest ファイルに直接,書き込んでもよいが,GUI環境で行いたい場合は下図の場所で設定する.
f:id:ymuto109:20110325150102p:image
f:id:ymuto109:20110325150112p:image

レイアウトの設定

レイアウトリソースの main.xml に を付与する.これは,Google Maps API キーを取得した際に提示されたXML例を貼り付け,さらにenabled, clickable 属性を付与した(true に設定した)ものである.なお,API キーの値 android:apiKey="@string/api_key" は string リソースにおいて定義してある.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    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="@string/api_key"
        />
</LinearLayout>

アクティビティ

package jp.android.hellomap;

import android.app.Activity;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class HelloMapActivity extends MapActivity {
    //地図に関する初期値
    static final int INITIAL_ZOOM_LEVEL = 15;
    static final int INITIAL_LATITUDE = 35455281;
    static final int INITIAL_LONGTITUDE = 139629711;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //MapView からコントローラを取り出す
        MapView map_view = (MapView)findViewById(R.id.mapview);
        
        //地図のズームを制御するためのズームコントローラを配置
        map_view.setBuiltInZoomControls(true); //getZoomControls();
        
        //位置とズームレベルの初期状態を設定する
        MapController controller = map_view.getController();
        GeoPoint point = new GeoPoint(INITIAL_LATITUDE, INITIAL_LONGTITUDE);
        controller.setCenter(point);
        controller.setZoom(INITIAL_ZOOM_LEVEL);
    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}

仮想端末の画面解像度

デフォルト値はVGA800 となっているが,HVGA に変更しないと Google map は動かない.
f:id:ymuto109:20110325142019p:image

動作チェック

起動直後の状態
f:id:ymuto109:20110325144405p:image

少しズームした状態
f:id:ymuto109:20110325144427p:image