Google memanjakan kita dengan banyak sekali service-service API yang bisa kita gunakan. Salah satunya adalah Google Place API ini. Saat ini kita akan coba membuat pencarian lokasi, jika ditemukan maka Google Maps akan menunjukan lokasi tersebut, sementara jika tidak ditemukan oleh Google Place API maka kita menggunakan alternatif Placepicker untuk menentukan lokasi yang kita maksud.
Oke langsung saja kita buat satu buah project baru dengan nama Google Place API
Membuat Project Google Place API masrahman28.blogspot.com |
Pilih Google Maps Activity masrahman28.blogspot.com |
Jika sudah kita akan diarahkan pada file google_maps_api.xml nah disini kita diminta untuk menyisipkan Google API Key bagaimana cara mendapatkannya? Baca dulu ya di tutorial Cara Mendapatkan Google API Key "PENTING" jangan lupa aktifkan service Google Place API nya yah. Sudah mendapatkan Google API Key yang diharapkan? kita copy ke file yang tadi ya jadi seperti berikut nantinya
Tambahkan Google API Key masrahman28.blogspot.com |
Oke langsung saja pertama kita tambahkan dulu Google Play Service di build.gradle (Module : app)
implementation 'com.google.android.gms:play-services-location:11.8.0' implementation 'com.google.android.gms:play-services-places:11.8.0'
Setelah itu kita tambahkan permission internet di AndroidManifest.xml baru kita mulai ngodingnya yah
Sekarang kita buka activity_maps.xml dan tambahkan satu buah button serta PlaceAutoCompleteFragment yang merupakan widget bawaan dari play service places. Jadi jika widget tersebut tidak ditemukan maka balik lagi ke build.gradle mungkin belum bener. Jadi layout kita seperti ini
<uses-permission android:name="android.permission.INTERNET"/>
Sekarang kita buka activity_maps.xml dan tambahkan satu buah button serta PlaceAutoCompleteFragment yang merupakan widget bawaan dari play service places. Jadi jika widget tersebut tidak ditemukan maka balik lagi ke build.gradle mungkin belum bener. Jadi layout kita seperti ini
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" tools:context="com.example.googleplaceapi.MapsActivity" > <fragment android:id="@+id/place_autocomplete_fragment" android:layout_width="match_parent" android:layout_height="40dp" android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" /> <Button android:id="@+id/btnCarilokasi" android:layout_width="match_parent" android:layout_height="40dp" android:text="Lokasi Tidak Ditemukan"/> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
Selanjutnya kita buka file MapsActivity.java, sedikit penjelasan untuk penggunaan PlaceAutocompleteFragment kita hanya memerlukan coding di bawah ini
autocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { lokasirubah(place.getLatLng(), place.getName().toString()); } @Override public void onError(Status status) { } });
Dan untuk penggunaan Placepicker kita membutuhkan fungsi Intent dan onActivityResult, contoh pemanggilan intent nya seperti di bawah ini
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); startActivityForResult(builder.build(MapsActivity.this), PLACE_PICKER_REQUEST);
Mudah bukan, nah untuk coding lengkap MapsActivity.java nya ada di bawah ini
package com.example.googleplaceapi; import android.content.Intent; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.google.android.gms.common.GooglePlayServicesRepairableException; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.places.Place; import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment; import com.google.android.gms.location.places.ui.PlacePicker; import com.google.android.gms.location.places.ui.PlaceSelectionListener; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; PlaceAutocompleteFragment autocompleteFragment; Button btnCari; private final int PLACE_PICKER_REQUEST = 8; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); autocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { lokasirubah(place.getLatLng(), place.getName().toString()); } @Override public void onError(Status status) { } }); btnCari = (Button)findViewById(R.id.btnCarilokasi); btnCari.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); startActivityForResult(builder.build(MapsActivity.this), PLACE_PICKER_REQUEST); } catch (GooglePlayServicesRepairableException e) { e.printStackTrace(); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==PLACE_PICKER_REQUEST){ if(resultCode==RESULT_OK){ Place place = PlacePicker.getPlace(data, this); lokasirubah(place.getLatLng(), place.getName().toString()); } } } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; } private void lokasirubah(LatLng latLng, String name) { mMap.clear(); MarkerOptions marker = new MarkerOptions(); marker.position(latLng); marker.title(name); mMap.addMarker(marker); mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14.0f)); } }
Project penggunaan Google Place API dan Placepicker telah dapat dijalankan. Hasilnya akan jadi seperti berikut
Google Place API masrahman28.blogspot.com |
Contoh Penggunaan Placepicker masrahman28.blogspot.com |
Tidak ada komentar:
Posting Komentar