搜尋此網誌

2015年12月7日 星期一

在 Android 上加上搜尋地理位置的功能 Google Places API (地方資訊挑選器 PlacePicker )

google 擁有大量的店家資料以及地圖的圖資。如果不拿來運用是不是太可惜了呢?
其實 google 有提供 API 給各個平台來做串接的動作


在使用之前我們仍然需要取得憑證簽署 API 金鑰。這個部分官方寫得很詳盡我們直接看即可。
簽署與 API 金鑰

除此資外我們要在 Google Developers Console 申請 Google Places API for Android 的使用權限。這個 API 是有配額的 一天只能接受 1,000 次的查詢,如果是已經綁定信用卡的話可以增加到 150,000 次查詢。接下來應該就是要付費了吧。

開始進入正題:

這篇我們先來一個超簡單的:PlacePicker 他是經由 Intent 動作就可以呼叫的,連 UI 都不用我們自己建立。當我們呼叫後就會自動進入下面這個畫面:

包含了地圖,現在位置,周邊店家 通通都有了




AndroidManifest.xml

增加 ACCESS_FINE_LOCATION 權限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Activity上建立進入地圖的動作:

private static final int REQUEST_PLACE_PICKER = 1;


PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder();
                Intent intent;
                try {
                    intent = intentBuilder.build(StoreAdd.this);
                    startActivityForResult(intent, REQUEST_PLACE_PICKER);
                } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {
                    e.printStackTrace();
                }

Activity上建立回傳資料後的動作:

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_PLACE_PICKER){
            if (resultCode == RESULT_OK){
                Place place = PlacePicker.getPlace(data, this);

                Log.e("place", place.toString());

            }
        }
    }

如此一來當使用者點選地圖頁面上面的地點名稱後,就會回傳該地點的資料到 onActivityResult 的 Log.e 裡面。

雖然這個作法做起來超快速,但是卻不是 google 最推薦的做法。根據 google 文件上面的說法。如果我們只是要取得資料,沒有打算讓使用者在我們的 APP 上面直接建立資料給 google 其實使用 http 的 web-service 就可以摟!不過這樣的話 UI 就要很辛苦的自己做摟。

3 則留言:

  1. 請問V2 跟place的差別是在於

    place有UI跟內建圖資

    V2算是開發自己需要的地圖

    是這樣來分別嗎?

    回覆刪除
  2. intent = intentBuilder.build(StoreAdd.this);
    請問我在執行APP的時候StoreAdd一直被顯示紅字錯誤該如何解決呢?

    回覆刪除