· 6 years ago · Mar 19, 2020, 01:26 PM
1import org.apache.http.client.HttpResponseException;
2
3import android.util.Log;
4
5import com.google.api.client.googleapis.GoogleHeaders;
6import com.google.api.client.http.GenericUrl;
7import com.google.api.client.http.HttpRequest;
8import com.google.api.client.http.HttpRequestFactory;
9import com.google.api.client.http.HttpRequestInitializer;
10import com.google.api.client.http.HttpTransport;
11import com.google.api.client.http.javanet.NetHttpTransport;
12import com.google.api.client.http.json.JsonHttpParser;
13import com.google.api.client.json.jackson.JacksonFactory;
14
15@SuppressWarnings("deprecation")
16public class GooglePlaces {
17
18 /** Global instance of the HTTP transport. */
19 private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
20
21 // Google API Key
22 private static final String API_KEY = "<Your KEY>";
23
24 // Google Places serach url's
25 private static final String PLACES_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/search/json?";
26 private static final String PLACES_TEXT_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/search/json?";
27 private static final String PLACES_DETAILS_URL = "https://maps.googleapis.com/maps/api/place/details/json?";
28
29 private double _latitude;
30 private double _longitude;
31 private double _radius;
32
33 /**
34 * Searching places
35 * @param latitude - latitude of place
36 * @params longitude - longitude of place
37 * @param radius - radius of searchable area
38 * @param types - type of place to search
39 * @return list of places
40 * */
41 public PlacesList search(double latitude, double longitude, double radius, String types)
42 throws Exception {
43
44 this._latitude = latitude;
45 this._longitude = longitude;
46 this._radius = radius;
47
48 try {
49
50 HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
51 HttpRequest request = httpRequestFactory
52 .buildGetRequest(new GenericUrl(PLACES_SEARCH_URL));
53 request.getUrl().put("key", API_KEY);
54 request.getUrl().put("location", _latitude + "," + _longitude);
55 request.getUrl().put("radius", _radius); // in meters
56 request.getUrl().put("sensor", "false");
57 if(types != null)
58 request.getUrl().put("types", types);
59
60 PlacesList list = request.execute().parseAs(PlacesList.class);
61 // Check log cat for places response status
62 Log.d("Places Status", "" + list.status);
63 return list;
64
65 } catch (HttpResponseException e) {
66 Log.e("Error:", e.getMessage());
67 return null;
68 }
69
70 }
71
72 /**
73 * Searching single place full details
74 * @param refrence - reference id of place
75 * - which you will get in search api request
76 * */
77 public PlaceDetails getPlaceDetails(String reference) throws Exception {
78 try {
79
80 HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
81 HttpRequest request = httpRequestFactory
82 .buildGetRequest(new GenericUrl(PLACES_DETAILS_URL));
83 request.getUrl().put("key", API_KEY);
84 request.getUrl().put("reference", reference);
85 request.getUrl().put("sensor", "false");
86
87 PlaceDetails place = request.execute().parseAs(PlaceDetails.class);
88
89 return place;
90
91 } catch (HttpResponseException e) {
92 Log.e("Error in Perform Details", e.getMessage());
93 throw e;
94 }
95 }
96
97 /**
98 * Creating http request Factory
99 * */
100 public static HttpRequestFactory createRequestFactory(
101 final HttpTransport transport) {
102 return transport.createRequestFactory(new HttpRequestInitializer() {
103 public void initialize(HttpRequest request) {
104 GoogleHeaders headers = new GoogleHeaders();
105 headers.setApplicationName("AndroidHive-Places-Test");
106 request.setHeaders(headers);
107 JsonHttpParser parser = new JsonHttpParser(new JacksonFactory());
108 request.addParser(parser);
109 }
110 });
111 }
112
113}