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>
実行する
今度こそ表示されるでしょうか?
無事に表示されました。ようやくスタートライン!