久しぶりに用事があって、Android API プログラミング・リファレンス
のGoogle Maps Androidのサンプルを使ってみたのですが、エラーが出て全く動作しなくなってました。
いくつか設定を変更すると解決したので、とりあえずメモ。
メタデータを追加
まず一つ目は、メタデータの追加。このままの状態でアプリを起動すると、ログに次の文言が表示されます。
08-16 14:19:21.638: E/AndroidRuntime(30325): FATAL EXCEPTION: main
08-16 14:19:21.638: E/AndroidRuntime(30325): Process: jp.android.booksample.mapsample, PID: 30325
08-16 14:19:21.638: E/AndroidRuntime(30325): java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.android.booksample.mapsample/jp.android.booksample.mapsample.MapActivity}: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 5089000 but found 0. You must have the following declaration within the element:
・・・ 以下略 ・・・
詳しくはログの通りなのですが、Google Maps Androidを使う場合、いつのバージョンからかメタデータとして、新しい指定が必要になったようです。
- 名前:com.google.android.gms.version・値:@integer/google_play_services_version
なので、書籍に書かれている「com.google.android.maps.v2.API_KEY」に加えて、メタデータとして「com.google.android.gms.version」を追加します。
権限の追加
次にアプリを起動すると、次のようなログが出力されました。
08-16 15:23:05.798: E/AndroidRuntime(12819): FATAL EXCEPTION: main
08-16 15:23:05.798: E/AndroidRuntime(12819): Process: jp.android.booksample.mapsample, PID: 12819
08-16 15:23:05.798: E/AndroidRuntime(12819): java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.android.booksample.mapsample/jp.android.booksample.mapsample.MapActivity}: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
08-16 15:23:05.798: E/AndroidRuntime(12819): <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
08-16 15:23:05.798: E/AndroidRuntime(12819): <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
こちらも指示の通り、次の権限を追加します。
- android.permission.ACCESS_NETWORK_STATE
- android.permission.WRITE_EXTERNAL_STORAGE
このふたつを行うと、とりあえずアプリは今までどおり起動できるようになります。
まとめ
というわけで、Google Maps Androidには以下の権限・メタデータが必要になったようです。動かないという人は、試してみてね。
メタデータ
- 名前:com.google.android.gms.version・値:@integer/google_play_services_version
権限
- android.permission.ACCESS_NETWORK_STATE
- android.permission.WRITE_EXTERNAL_STORAGE