2016年6月11日土曜日

Maps Android API タップしたところにマーカーを付ける。

やりたいこと
マップをタップして、そこにマーカーを表示させるようにしたい。

環境
Android Stduio 2.1.2

準備(プロジェクトの作成とか...)知っている人はスキップしてください。
1.File - New - New Project... (もしくは、最初の画面で、Start a new Android Studio project)
2.Application nameと、Company Domainを入力して、Next
 SDKバージョンとか選択して、Next
3.Google Maps Activityを選択する。
4.Activity名とかを入れて、Finish
5.APIキーの取得
google_maps_api.xmlの3行目のURLにアクセスする。
行った先でAPIキーを作成する。
google_maps_api.xmlのYOUR_KEY_HEREにキーを貼り付ける。
地図のタップを拾うイベントリスナーを追加する。
デフォルトで存在するonMapReady()にイベントリスナーを追加するとできます。(12行目からの処理を追加します。)
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera  ← これは最初からある処理です。シドニーにマーカーをさすやつ。
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));


        // 地図タップイベント  ← ここから追加した処理になります。
        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
               @Override
               public void onMapClick(LatLng point) {

                   // タップした位置の表示
                   Toast.makeText(getApplicationContext(), "タップ位置\n緯度:" + point.latitude + "\n経度:" + point.longitude, Toast.LENGTH_LONG).show();

                   // マーカーを追加
                   LatLng latLng = new LatLng(point.latitude, point.longitude);
                   mMap.addMarker(new MarkerOptions().position(latLng).title("test"));

               }
           }
        );

    }
苦労した点
イベントリスナーをどこにおいたらよいのかよくわからず、苦戦しました。
最初、MapsActivityにOnMapClickListnerのinterfaceをもたせようとしたのですが、うまくいきませんでした。
次に、onCreate()の中にsetイベントリスナーを入れたのですが、こちらもうまくいかず、アプリ起動直後に落ちるような感じになりました。

2016年6月9日木曜日

Google Maps Android API 入門

やりたいこと
Google Map APIを使って、地図をつかったサイトをつくってみたいと思い、
料金を調べてみました。

https://developers.google.com/maps/pricing-and-plans/?hl=ja#details
ウェブサイトとかで使う場合は、使い方によっては課金される場合があることがわかりました。
なのでAndroidでアプリを作ることにしました。
地図をだす。(実機)
こちらのページの手順通りに試したところ、実機に地図が表示されるところまでができました。
https://akira-watson.com/android/google-map.html

1.Android Studioで新規プロジェクトを作成して、
2.Map Activityを選択して、
3.google_maps_api.xmlのリンクをクリックして、APIキーを取得して、
4.取得したキーをgoogle_maps_api.xmlに書く。

表示されました。
地図をだす。(genymotion)
genymotionではmapアプリを立ち上げても、地図が表示されません。
こちらもググると情報がでてきたので、こちらのサイトを参考にしたところ表示されました。
http://nelog.jp/how-to-use-google-play-in-genymotion
http://www.teamandroid.com/gapps/
エミュレータは4.1.1を使用しているのですが、
Genymotion-ARM-Translation_v1.1.zip と gapps-jb-20121011-signed.zipを エミュレータにD&Dすることでできました。

Android Studio コンパイルエラー

こんなことがありました。
ほぼデフォルトで作成した新規プロジェクトでコンパイルエラーが起きました。

1.Android Studioを起動して、New-Projectを作成。
2.Google Map Activityを選択する。
3APIキーを取得して、設定する。
4.ビルドする。



コンパイルエラーが発生する。

--------------------
Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
Error:(18) Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.
Error:Execution failed for task ':app:processDebugResources'.
--------------------
こんなことを試してみた。(だめだったこと)
ググってみて、
build.gradleのバージョンの指定方法を変えるとうまくいくという情報があったので試してみたのですが、
このバージョンを何にすればよいのかわからず、適当にやってみたのですが、うまくいきませんでした。
    buildToolsVersion "23.0.2"    // もともと
    //buildToolsVersion "22.0.1" // こっちに変えてみたりした。

    compile 'com.android.support:appcompat-v7:22.2.1' // もともと
    //compile 'com.android.support:appcompat-v7:23.0.2' // こっちに変えてみたりした。
結局どうなったか?
解決できませんでした。
そうこうしているうちに、Android Studioの更新が通知されてきたので、更新したあとに
再度新規プロジェクトを作りなおしたところエラーが出なくなりました。

う~ん。 VSではこういうことはない。