在 Android 上加上搜尋地理位置的功能 Google Places API (地方資訊挑選器 PlacePicker )
這篇我們有提到, PlacesPicker 雖然方便但是有使用上的限制,其實 1,000 次的使用量可是一下子就用完了呢!所以官方也推薦我們直接用 JavaScript 的 API 或是 http 的 API 來使用。
這些也都是有使用限制的,不過 http 的限制額度是算在使用者自己的額度上而不是以我們的 APP 來計算所以相對非常足夠。
API 文件連結
首先我們仍然是要去申請一支api金鑰 (因為和 Android 使用的不同權限所以要另外申請喔)
接著就是重頭戲了:api 輸入和輸出的值就不解釋了,請看官方文件,有超清楚的中文範例。
要注意的有幾點:
- 這個 API 只有接受 HTTP GET 不接受 POST
- 經緯度是必填所以在呼叫這支 API 前要搭配 Android 取得經緯度範例 服用
下面是範例:
public class SearchPoi extends AppCompatActivity {
AQuery aQuery = new AQuery(this);
private static final String TAG = "LocationActivity";
GPSTracker gps;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// 宣告使用 GPSTracker
gps = new GPSTracker(this);
if(gps.canGetLocation()){
//取得經緯度
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
//設定API
String ListApi = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?key="+getString(R.string.web_api_key)+"&radius=500&location=" + latitude +","+ longitude;
// 呼叫 API
aQuery.ajax(ListApi, null, JSONObject.class, new AjaxCallback() {
@Override
public void callback(String url, JSONObject object, AjaxStatus status) {
super.callback(url, object, status);
System.out.println("===url===" + url);
System.out.println("==obj==" + object);
System.out.println("=status=" + status);
try {
//取得地理位置名稱
for(int i = 0;i<=object.getJSONArray("results").length();i++){
Log.e("results name",object.getJSONArray("results").getJSONObject(i).getString("name"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}else{
Toast.makeText(this,"error",Toast.LENGTH_SHORT).show();
}
}
}
沒有留言:
張貼留言