GoogleMapを表示するAndroidアプリを作ってみた

#はじめに
　諸事情でGoogleMapを使ったAndroidアプリを作ることになりそうなので，予習を兼ねて作ってみた．完璧に初心者なので，間違いや修正等があった時はご指摘頂けると幸いです．

#手順
1．Android Studioのインストール
2．Google Play Servicesのインストールと関連付け
3．Google Map APIの準備

#作業
##1．Android Studioのインストール
　既に終わっている前提で話を進める．
##2．Google Play Servicesのインストールと関連付け
　まずは，インストールから行う．`Android SDK -> SDK Tools -> Google Play services`の順に進めて`Apply`で適用する．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/85a26dc1-198d-4083-f8be-2f6bb78e520a.png)
次に関連付けをおこなう．`build.gradle`に`compile 'com.google.android.gms:play-services:+'`を追記する．

```gradle:build.gradle
dependencies {
    ...
    compile 'com.google.android.gms:play-services:+'
}
```
そして，画面の右上のほうに出てくる`Sync Now`で同期させる．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/2047835a-c9ae-aca9-c547-16ff7bc0abc0.png)
最後にマニフェストの追加をする．以下の<meta>要素を`AndroidManifest.xml`の`<application>`要素内に追記する．

```xml:AndroidManifest.xml
        ...
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>
</manifest>
```
##3．Google Map APIの準備
###SHA-1フィンガープリントを調べる
　プロンプトを開いて`JDKのbinディレクトリ`に移動する．そこで以下を実行する．`<ユーザ名>`は適宜書き換える．

```
keytool -list -v -keystore "C:¥Users¥<ユーザ名>¥.android¥debug.keystore" -alias androiddebugkey -storepass android -keypass android"
```
たくさん表示されるかもしれないが，`SHA1: `の行に並んでいる16進数をコピーしておく．
###Google Developers ConsoleでAPIを取得する
　[Google Developers Console](https://console.developers.google.com/project)に入る．適当な名前のプロジェクトを作成して，ダッシュボードの中に入る．定期的にレイアウトが若干変わっている(?)ようなので，無い時は各自で探してほしい．
　次に，`APIとサービスを有効化`をクリックする．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/2c2afab6-5208-594a-09d0-89cd9bed90f0.png)
検索してAndroid用のGoogle Map SDKを探す．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/27842b36-3780-50cf-d4f8-38732bfdce50.png)
見つけたSDKを有効化して，認証情報の欄に移動する．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/8908fc31-ae54-4a1b-e4fe-3c5c6ec97fa9.png)
APIキーを選択するとキーが生成されるので，次にAPIの制限を行う．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/bbc4baab-6351-a87a-613a-e0239da4bc39.png)
`アプリケーションの制限`で`Androidアプリ`を設定．`Androidアプリに使用を限定`の欄にはパッケージ名と先に取得していたSHA1証明書を貼り付ける．ほとんどのケースで，パッケージ名は`com.example.プロジェクト名`のようになっていると思う．
###APIキーを適用する
　マニフェストファイル`AndroidManifest.xml`を開いて，`<application>`要素内に以下を追記する．`<API key>`の欄には自分のAPIキーを書き込む．

```xml:AndroidManifest.xml
<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="<API key>"/>
```
###パーミッションの設定
　さっきの`AndroidManifest.xml`の`<manifest>`要素内に以下を書き込んで権限を追加する．

```xml:AndroidManifest.xml
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
###描画の設定
　パーミッションと同様にマニフェストの`<manifest>`要素内に以下を追記．

```xml:AndroidManifest.xml
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>
```
#サンプルプログラム
##レイアウトのコード
　元々書かれているものを全部消して以下のコードを書き込む．

```xml:activity_main.xml
<fragment android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="com.google.android.gms.maps.MapFragment"
    android:id="@+id/map"
    xmlns:android="http://schemas.android.com/apk/res/android" />
```
##アクティビティのコード
　1行目の`package com.example.名前`以外をすべて消す．そして以下のコードを追記する．

```java:MainActivity.java
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

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

public class MainActivity extends AppCompatActivity {

    MapFragment mf;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mf = MapFragment.newInstance();

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(android.R.id.content, mf);
        ft.commit();
    }
}
```
#実行画面
　エミュレータの実行画面．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382909/1fbaf3e6-6963-ee10-765c-471be2dcc4d0.png)

#参考にさせていただいたサイト
[Android StudioでGoogle Map APIを使う](https://qiita.com/takeito/items/e4a82fc3a642afd978ca)
[Androidアプリ開発でGoogleMapを利用する](https://qiita.com/rkonno/items/8bec3d5a45235fc88a08)