モケラ

Tech Sheets

mokelab

AndroidでGoogle Mapを表示する

最終更新日:2015-05-26

※スクリーンショットは後からいれます(量多いので。。。)

本記事執筆時点ではGoogle Maps Android API v2です。今回は1つずつ落とし穴にはまりながら表示までたどり着いてみます。

play-services-mapsをbuild.gradleに追加する

Google Map系のAPIはplay-services-mapsに入っているので、build.gradleのdependenciesに追加します。執筆時点での最新バージョンは7.3.0です。(すぐGoogle I/Oで新しいの出てきそうですが)

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    // この行を追加
    compile 'com.google.android.gms:play-services-maps:7.3.0'
}

SupportMapFragmentを貼り付ける

まずは練習としてMapFragmentをそのまま貼り付けてみましょう。Support-v4環境ではSupportMapFragmentクラスを使います。

public class MainActivity extends AppCompatActivity {

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

        if (savedInstanceState == null) {
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();

            transaction.add(R.id.container, SupportMapFragment.newInstance());

            transaction.commit();
        }
    }
}

実行してみる

この時点で実行すると、次のようなエラーがでます。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mokelab.map2/com.mokelab.map2.MainActivity}: java.lang.RuntimeException: API key not found.  Check that <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml

meta-dataにAPI_KEYをセットしてね、というエラーですね。ということでAPI Key取得の旅に出かけることにします。

Google Developer Consoleでプロジェクトを作成する

※この節はいろんな場面で登場するので別ページに移動する可能性あります

Google Developer Consoleで1つプロジェクトを作成します。(執筆時点では)左上の「プロジェクトを作成」ボタンでプロジェクトを作成できます。

Map APIを有効にする

プロジェクトが作成できたら、左側の「APIと認証」をクリックし、配下の「API」を選びます。ここでは、今のプロジェクトでどのGoogle APIを利用するかを選びます。「Google Maps Android API」を選び、「APIを有効にする」をクリックしましょう。

キーを作成する

APIを有効にしたら、次はAPI Keyを作成します。「APIと認証」の配下に「認証情報」という欄があるので選びます。「クライアントIDを作成」と「新しいキーを作成」の2つが表示されるので、下の「新しいキーを作成」を選びます。

ダイアログが表示されるので「Androidキー」をクリックします。

次のダイアログで、リリース用のSHA1証明書フィンガープリントとアプリのパッケージ名の入力を求められます。開発用であれば空欄でOKですが、かならずリリース時は証明書フィンガープリントとパッケージ名を指定したキーを使いましょう。もし空欄にしたまま作成したキーをリリース用アプリで使用してしまった場合、第三者がそのキーを使用できてしまい、とんでもない請求がくるといった事態に発展してしまいます。

キーが作成できると「APIキー」が表示されるので、それを控えておきます。

AndroidManifest.xmlにmeta-dataを追加する

エラー表示に従ってAndroidManifest.xmlに次の記述を追加します。your API keyの部分は先ほど作成した「APIキー」を指定します。

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="your API key"/>
</application>

実行する

API_KEYも追加したのでここで実行してみます。すると、今度は次のようなエラーがでてアプリが落ちます。

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mokelab.map2/com.mokelab.map2.MainActivity}: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

permissionが足りないよというエラーです。親切なことにこの3つを書いてねとエラーにでてきます。

AndroidManifest.xmlにpermissionを追加する

指摘の通りにpermissionを追加します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mokelab.map2" >

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application><!-- 中略 -->
    </application>
</manifest>

実行する

今度こそ表示されるでしょうか?

無事に表示されました。ようやくスタートライン!

一覧に戻る