情報系の凡才日記

エンジニアりんぐの試行錯誤とか参加したイベントとかについて書いていこうとおもいます。

【Androidアプリ開発】Google Maps Android API v2を使う

こんにちは。

バイトの方で地図関連の案件に携わっているので今日は予習も兼ねて、Google Maps Android API v2の導入をやってみたいと思います。

ここを参考にしました。

Google Maps Android API v2 — Google Developers

導入手順

  1. GooglePlayServicesの導入(本記事では割愛します)
  2. GoogleAPIキーの取得
  3. Manifestファイル記述
  4. 実際に使用してみる

APIキーの取得

まず、

https://cloud.google.com/console/project

にてプロジェクトを作成。(自分はすでに作成済みだったのでここはスルー)

作成したらそのプロジェクトのページへ。

左側のメニュー「APIs&auth」の中の「APIs」に飛んで、ここで「Google Maps Android API v2」をONにする。

「APIs&auth」の中の「Credentials」に飛んで「CREATE NEW KEY」ボタンを押してAndroidを選択。

入力するのは、

{SHA1 fingerprint};{パッケージネーム}

っていう形式になります。

SHA1 fingerprintの確認方法は、

Eclipseの環境設定の、Android→ビルドで確認できます。


f:id:taisho6339:20140111205333p:plain

こんな感じ。

これ入力してCreateすればOK!


Manifestファイルの記述

Manifestに追加するのは、4点になります。

1.OpenGL ESの依存明示

 <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />


なんかGoogleMapは内部でOpenGL ESを使用してるっぽいので書いておくらしい。
ちなみにこのタグがなんなのか調べたところ、端末と機能の依存を明示するタグで、この機能が端末にない場合インストールを防ぐことができるみたい。例えばカメラ持ってない端末へカメラアプリいれても使えないので、そういった場合フィルタリングかけられるみたいです。 なるほど・・・。

2.パーミッションの記述

 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


これらは上から順に、

 インターネットアクセス:マップのダウンロードに使う
 ネットワーク状態チェック:これも上に同じ
 外部ストレージへの書き込み:マップのキャッシュを保存しておくのに使う
 GoogleAPIへのアクセス:省略
 
残り2つは、ネットワーク経由での位置情報取得、GPS経由での位置情報取得。Mapを表示するだけならなくても平気だけどまあ絶対つかうだろう、、、ってことで、、、

3.GooglePlayServicesのバージョン情報

  <meta-data
          android:name="com.google.android.gms.version"
          android:value="@integer/google_play_services_version" />

4.APIキーの記述

  <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="自分のAPIキー"/>

これをすべて記述してマニフェストは完了になります。

実際に使用してみる

ここまで来たらあとは使うだけ!
ってことで試しに以下のコードを書いてみました。


activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

</LinearLayout>

MainActivity.java


package com.taishonet.mapsample;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.app.Activity;

import com.google.android.gms.maps.MapFragment;


public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		FragmentManager manager = getFragmentManager();
		FragmentTransaction transaction = manager.beginTransaction();
		MapFragment map = new MapFragment();
		transaction.add(R.id.content, map);
		transaction.commit();

	}

}
 

実行結果

f:id:taisho6339:20140111231305p:plain


おー出た出た。

なにも表示されないって場合はAPIキーが間違っているとかかもです。
今日はここまで。