スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android 自分の位置をMap上に描画



プログラム組んでて思うこと。
会社と家とやってることに差がないw


さて一度はやってみたい自分の位置を地図上に描画。
今日一日の作業メモを複数回に分けて記録。


動作確認環境
・OS:Windows7 64bit上でのエミュレータ
・HT-03Aでも一応動いたことは確認


エミュレータ
・Google API (APILevel4以上)が使用できること
・GPS有効に


Android Maps API用にAPIキーの取得


Android上に地図を表示するためには、MapActivityを継承したクラスとレイアウトにMapViewを使用すればOK!
素敵です。


そして、そのMapView上にOverlayクラスを使えば地図上に描画もできる。
あとは、LocationListenerを使用してGPSを取得して・・・。


っていうかそのOverlayにLocationListener+SensorListenerをimplimentしたクラスMyLocationOverlayってのが用意されています。


なので以下の実装だけでとりあえず現在位置は描画できちゃいました。



layout/main.xml


<?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/map"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		android:clickable="true"
		android:apiKey="取得したAPIキーを入れる" />
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     //中略

    <uses-library android:name="com.google.android.maps"></uses-library>
</application>
    <uses-sdk android:minSdkVersion="4" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

MapViewとか使うので
・<uses-library android:name="com.google.android.maps"></uses-library>
の追加を忘れずに

さらにネットに繋ぐ前提となるので
・<uses-permission android:name="android.permission.INTERNET"></uses-permission>
を追加

もちろんGPS使うので
・<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
も追加


main.java

package com.omkageru.ak.gpschk;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import android.os.Bundle;

public class Main extends MapActivity {
	private MapView mapView;
	private MyLocationOverlay overlay;

	/** 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.map);
		mapView.setEnabled(true);
		// ここから下はお好みで
		mapView.setClickable(true);
		mapView.setBuiltInZoomControls(true);
		mapView.setSatellite(false);

		// 今回の主役。有効にすることでGPSの取得が可能に
		overlay = new MyLocationOverlay(getApplicationContext(), mapView);
		overlay.enableMyLocation();

		// GPS取得が可能な状態になり、GPS初取得時の動作を決定(らしい)
		overlay.runOnFirstFix(new Runnable(){
			public void run() {
				// TODO 自動生成されたメソッド・スタブ
				// animateTo(GeoPoint)で指定GeoPoint位置に移動
				// この場合、画面中央がGPS取得による現在位置になる
				mapView.getController().animateTo(overlay.getMyLocation());
			}
		});

		// Overlayとして登録
		mapView.getOverlays().add(overlay);
		// とりあえず再描画
		mapView.invalidate();
    }

	/* (非 Javadoc)
	 * @see com.google.android.maps.MapActivity#onDestroy()
	 */
	@Override
	protected void onDestroy() {
		// 破棄されるときには無効にしておく
		overlay.disableMyLocation();
		mapView.getOverlays().remove(overlay);
		// TODO 自動生成されたメソッド・スタブ
		super.onDestroy();
	}

	@Override
	protected boolean isRouteDisplayed() {
		// TODO 自動生成されたメソッド・スタブ
		return false;
	}
}

とまあこんな感じですか?
一応動くはずです。
あ、基本Cの人で、Javaは勘とeclipse先生にお任せしているのでお作法がおかしいとかありましたら、やさしく教えてください。 動かすと以下みたいな感じに。(エミュレータ画面)


起動したて
gpschk01.png

GPS情報を流し込む
gpschk02.png

Google本社の場所が!
gpschk03.png

緯度38 経度138 とかそんな値を突っ込んだ結果
gpschk04.png

なお現状の実装では画面をタップして適当な箇所に動かした後、GPS情報を流し込んでもその場所へは移動しません。
gpschk05.png


参考 「Android プログラミング入門」
・第四部 5.2.3 MyLocationOverlay

関連記事

テーマ : グーグルモバイル
ジャンル : 携帯電話・PHS

tag : android サンプルソース

コメントの投稿

非公開コメント

プロフィール

駄猫

Author:駄猫

Twitter
その他
最新記事
カテゴリ
月別アーカイブ
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。