まずは、extendsをActivityから、MapActivityniに変更いたします。
import com.google.android.maps.MapActivity;
extends MapActivity implements LocationListener
importを失敗してしまう方は、
【対象のプロジェクトを右クリック】→【ビルド・パス】→【ビルド・パスの構成】→【Android】→【Google APIs】にチェック
*Google APIsが表示されない方は【ウィンドウ】→【Android SDK マネージャー】からインストールをお願いいたします。
package com.test.googlemaps;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapController;
//位置情報の取得
public class MainActivity extends MapActivity implements LocationListener {
//Mapビュー
private MapView mMapView;
//Mapコントローラ
private MapController mMapCtrl;
//ロケーションマネージャ
private LocationManager mLm;
//(1)で作成したAPIKEY
private final static String sAPI_KEY= "";
//アクティビティ起動時に呼ばれる
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
//-------------------------------------------
//①
//Mapビューの生成
mMapView = new MapView(this, sAPI_KEY);
setContentView(mMapView);
// MapViewをコントロールするためのオブジェクト取得
mMapCtrl = mMapView.getController();
// 地図の縮尺設定
mMapCtrl.setZoom(16);
//-------------------------------------------
}
//アクティビティ開始時に呼ばれる
@Override
public void onStart() {
super.onStart();
//-------------------------------------------
//②
//ロケーションマネージャの設定
mLm= (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mLm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
//-------------------------------------------
}
//アクティビティ停止時に呼ばれる
@Override
public void onStop() {
super.onStop();
//ロケーションマネージャーの設定
mLm.removeUpdates(this);
}
//ルート表示するかどうか
@Override
protected boolean isRouteDisplayed() {
return false;
}
//位置情報変更のイベント処理
public void onLocationChanged(Location location) {
//-------------------------------------------
//③
//緯度と経度の取得
int iIdo = (int)(location.getLatitude() * 1E6);
int iKeido = (int)(location.getLongitude() * 1E6);
GeoPoint pos=new GeoPoint(iIdo, iKeido);
mMapCtrl.setCenter(pos);
Toast.makeText(getApplication(), "経度:" +String.valueOf(iKeido) + ", 緯度:" + String.valueOf(iIdo), Toast.LENGTH_LONG).show();
//-------------------------------------------
}
}
ざっと書くとこんな感じです。
//-------------------------------------------
//①
mMapCtrl.setZoomで縮尺レベルを設定しています。
今回は「16」です。
//-------------------------------------------
//-------------------------------------------
//②
LocationManagerのrequestLocationUpdatesで現在いる場所を
取得しています。
mLm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 20*1000, 0, this);
上記のように書くと、5000ミリ秒(20秒)毎に更新をおこなうようになります。
requestLocationUpdates(プロバイダ、更新時間、更新距離、ロケーション)
requestLocationUpdatesはGoogle Mapを使う際に結構大事なところなので、
処理を押さえておくといいかと思います。
//-------------------------------------------
//-------------------------------------------
//③
Locationのオブジェクトからは、緯度経度の取得をして、
mMapCtrl.setCenterで今いる場所を地図の真ん中に
表示するよう設定しています・
緯度経度取得時の * 1E6 は見慣れた緯度経度と同じ単位にするために
10万倍(1E6倍)しております。
//-------------------------------------------
最後にmanifest.xmlの記載
ライブラリの使用
<uses-library android:name="com.google.android.maps"/>
ユーザーへの許可
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-library>タグは<application>タグ内の好きなところで
<uses-permission>は<application>の外で記載してくださいね。
0 件のコメント:
コメントを投稿