SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術

YOLPで挑戦~施設内を検索するAndroidアプリをお手軽に作成!

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術(4)

  • X ポスト
  • このエントリーをはてなブックマークに追加

AndroidManifest.xmlに設定を追加

 MapViewではネットワーク、GPSを使用しますので以下の設定をmanifestに追加します。

AndroidManifest.xml
<!-- MapViewを使用するのに必要な設定 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
<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"/>

 また、デフォルト設定だと画面が回転した時に毎回現在地を取りにいくので回転してもonCreateが読み込まれないように地図面のActivityにandroid:configChanges="orientation"を追加します。

AndroidManifest.xml
<activity
    android:label="@string/app_name"
    android:configChanges="orientation"
    android:name=".InnerSearchActivity" >

現在地周辺の地図を表示

 アプリ起動時に今回独自で作成したLocationControlクラスを使用し、現在地の取得を行います。LocationControl::startLocation で位置情報の取得を開始します。

InnerSearchActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ~ 中略 ~
    // 起動時に現在地を取得
    if (m_locationControl == null) {
        m_locationControl = new LocationControl(this, this);
        m_locationControl.setTimer(2000);
        m_locationControl.startLocation(false);
    }
    ~ 中略 ~
}

 結果をLocationControl::onCustomLocationChangedで受け取り、ここでLocationControlを停止させます。LocationControl::getLocationで位置情報を受け取り、そこから緯度経度を取得します。取得した緯度経度をGeoPoint形式にし、MapViewに渡すと現在地周辺の地図が表示されます。

 取得に失敗した場合はLocationControl::onCustomLocationErrorに入り、アラートダイアログで失敗したことを知らせます。

InnerSearchActivity.java
@Override
public void onCustomLocationChanged(LocationControl location) {
    // 位置情報を取得して変数にセット
    m_loca = m_locationControl.getLocation();
    stopGPS();

    // 取得した位置情報から緯度経度を別々に取得する
    firstLat = m_loca.getLatitude();
    firstLon = m_loca.getLongitude();
    int cLat = (int) (firstLat * 1000000);
    int cLon = (int) (firstLon * 1000000);
    startPos = new GeoPoint(cLat, cLon);

    // 取得した位置に地図を移動させる
    MapController mapctl = mapview.getMapController();
    mapctl.animateTo(startPos);
}

@Override
public void onCustomLocationError(LocationControl locationControl) {
    m_loca = m_locationControl.getLocation();
    stopGPS();

    // 位置情報取得失敗をアラートダイアログで表示
    new AlertDialog.Builder(this).setTitle("位置情報を取得出来ませんでした。")
        .setPositiveButton("OK", null).show();
}

次のページ
周辺施設の選択とビルアイコンのピンを表示

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術連載記事一覧

もっと読む

この記事の著者

中村 友一(ヤフー株式会社)(ナカムラ ユウイチ(ヤフーカブシキガイシャ))

2009年Yahoo!JAPAN入社。「Yahoo!自動車」の開発、「Yahoo!ロコ」の立ち上げを経てAndroid版「地図 Yahoo!ロコ」アプリの開発を担当。フットサル、自動車、楽器、写真など趣味は多数。TwitterIDは@sonatax。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6584 2012/05/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング