[Android] 地點自動完成 Google Places Autocomplete API

Google Place API 是 Google Map API 成員之一,結合地點與商家資訊,提供用戶指定地點附近的資訊,市場上同類的 API 還有 YelpFourSquare

Google Places API

目前 Android 支援的 Google Place API 共有三大功能:
  • 地點挑選器(Place Picker):在地圖上顯示挑選地點附近的商家資訊
  • 目前地點(Place Detection):自動偵測目前所在位置,並顯示附近商家
  • 地點自動完成(Place Autocomplete):輸入部分地點字串後,會回傳符合條件的相關地點資訊,可以搜尋商家名稱、景點、地理位置(例如國家、城市)等資訊
要使用 Google Place API,必須從 Google Developers Console 註冊 Google Places API for Android 的 API Key,Android API 的流量限制是每天 1000 筆請求,超過就要計費。

把申請好的 API Key 加入 AndroidManifest.xml
<application...>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="xxxxxxxxxxxxxx"/>
        </activity>
</application>

然後加入 Google Play Services 套件
compile 'com.google.android.gms:play-services-places:9.x.x'

Google 的 GitHub 上,有 Google Places API for Android 的範例程式 可參考!

地點自動完成

Google Places API 本身有 Rest Web Service,然而 Android 版本的 API 已經做了包裝,不需要再做網路請求與解析 JSON 資料的動作,這些 API 都已經幫我們做好了。

先增加一個 AutocompleteTextView Layout
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:hint="@string/search_city_hint"
    android:singleLine="true" />

在程式的部分,新建一個 Google API Client
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Places.GEO_DATA_API)
                .build();

然後需要一個 PlaceAutocompleteAdapter 作為資料顯示的容器,程式碼可以從 Google 範例程式取得,可以直接複製使用。
如果想限制自動完成的結果,可以定義 AutocompleteFilter,再將其傳入 PlaceAutocompleteAdapter,下面的範例是只顯示「城市」。更多篩選類型可參考 Google 文件
AutocompleteFilter filter = new AutocompleteFilter.Builder()
          .setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
          .build();

adapter = new PlaceAutocompleteAdapter(this, android.R.layout.simple_list_item_1, googleApiClient, null, filter);

以下是執行的結果,也可輸入中文,Google 會自動根據裝置的語系,回傳相對應的名稱。

以下是完整的程式碼

相關文章

如何將電腦畫面經由 Chromecast 投放到電視螢幕上

Chrome 的檔案續傳功能

Mac與Android裝置傳輸檔案的方法

使用 Vysor 在電腦上控制 Android 裝置