Integrate the Google Maps Directions API
- Ensure you have included the Google Play Services in your project by adding the appropriate dependencies in your `build.gradle` file. This typically includes:
implementation 'com.google.android.gms:play-services-maps:18.0.2'
implementation 'com.google.android.gms:play-services-location:21.0.1'
- Set up the map fragment in your `activity_main.xml` layout to load the Google Map:
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Enable API Calls and Request Permissions
- Ensure the necessary permissions are requested in `AndroidManifest.xml`:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
- Request location permissions in your Activity to ensure your app can access location services when needed:
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION);
Fetch Directions API Data
- Construct a URL for the Google Maps Directions API and make a network call to fetch directions. You can use `OkHttpClient` for network calls:
String origin = "origin=START_LAT,START_LONG";
String destination = "destination=END_LAT,END_LONG";
String apiKey = "key=YOUR_API_KEY";
String url = "https://maps.googleapis.com/maps/api/directions/json?" + origin + "&" + destination + "&" + apiKey;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
final String jsonResponse = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Parse and display directions
}
});
}
}
});
Parse and Display Directions
- Parse the JSON response to extract necessary route information. It is useful to parse the steps and display them in a `Polyline` on your map. Utilize a helper class or library to parse JSON objects and responses for easier access.
JSONObject jsonObject = new JSONObject(jsonResponse);
JSONArray routes = jsonObject.getJSONArray("routes");
JSONObject route = routes.getJSONObject(0);
JSONObject overviewPolyline = route.getJSONObject("overview_polyline");
String encodedString = overviewPolyline.getString("points");
List<LatLng> points = PolyUtil.decode(encodedString);
// Drawing polyline in the Google Map
PolylineOptions polylineOptions = new PolylineOptions().addAll(points);
googleMap.addPolyline(polylineOptions);
- Use markers to indicate start and end locations on the map:
googleMap.addMarker(new MarkerOptions().position(START_LAT_LNG).title("Start Location"));
googleMap.addMarker(new MarkerOptions().position(END_LAT_LNG).title("End Location"));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(START_LAT_LNG, 10));
Troubleshoot Common Issues
- Verify that the API key is correctly configured in your `Strings.xml` file and that the Directions API has been enabled in the Google Cloud Platform.
- Ensure the app has network permissions and access to location services, which are critical for fetching the route and displaying it correctly.