14 Feb 2018

Tutorial Android : Mencari Lokasi dengan Google Place API dan Placepicker

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
Next, next saja ya lalu untuk mempercepat penyelesaian kita gunakan jenis Activity yang Google Maps Activity ya
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

<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