2012年12月4日火曜日

Google Map を使ってみよう!!(02)

Google APIキーを取得したら、いよいよ組込みです。


まずは、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 件のコメント:

コメントを投稿