Tutorial Mendapatkan Lokasi Pengguna di Android Menggunakan Fused Location API

Halo semuanya, sebelumnya saya sudah pernah membuat beberapa tutorial tentang cara mendapatkan lokasi pengguna pada Android. Yaitu menggunakan LocationManager dan menggunakan versi awal dari Google Location APIs. Namun karena perkembangan dari Google Play Services itu sendiri, kedua metode tersebut sekarang sudah deprecated atau tidak digunakan lagi. Dan metode terbaru yang akan kita pakai di tutorial ini adalah mendapatkan lokasi pengguna menggunakan Google fused location API.

Apa itu fused location API?

Fused Location API pada dasarnya adalah seperti suatu gateway untuk mengakses lokasi pengguna. Berbeda dengan metode LocationManager sebelumnya yang cukup ribet, Fused Location API mempunyai API yang simple dan mudah digunakan. Selain itu Fused Location API akan secara otomatis mengambil lokasi paling akurat menggunakan cara yang paling efisien. Karena itu dengan menggunakan Fused Location API, kita juga bisa menghemat baterai saat pencarian lokasi karena sifatnya yang low power.

Satu-satunya kerugian dengan menggunakan Fused Location API ini adalah, jika handphone pengguna tidak mempunyai Google Play Services, maka Fused Location API tidak bisa digunakan pada aplikasi yang terinstall di device tersebut. Karena Fused Location API merupakan satu bundle dengan Google Play Services. Namun jangan khawatir karena biasanya handphone-handphone yang tidak mempunyai Play Services adalah smartphone Android buatan china seperti Xiaomi atau Meizu, yang mempunyai versi Android yang sudah dirombak total.

Mendapatkan lokasi pengguna di Android menggunakan Fused Location API

Di tutorial ini kita akan belajar cara mendapatkan lokasi pengguna di Android menggunakan Fused Location API. Pertama-tama, silahkan kalian buat project baru di Android Studio terlebih dahulu.

Kemudian, karena base project ini adalah pengembangan dari tutorial Google Places API yang pernah saya buat. Sangat disarankan untuk membaca tutorial tersebut terlebih dahulu.

Jika sudah, kita bisa buka file build.gradle dan tambahkan dependencies Play Services Location seperti di bawah ini :

build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.google.android.gms:play-services-location:10.0.1'
}

Versi dari library di atas adalah versi terbaru saat artikel ini dibuat, kalian bisa menggantinya dengan versi yang lebih baru lagi.

Setelah itu, kalian bisa buka file layout activity_main.xml, dan copy pastekan code di bawah ini :

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/bgp"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="id.web.twoh.placesapitutorial.MainActivity">

    <Button
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/bt_getLocation"
        android:text="Get Location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

Selanjutnya, kita akan langsung ke class activity utama atau MainActivity.java, dimana semua logic yang dibutuhkan untuk mendapatkan lokasi pengguna ada di kelas tersebut. Ubahlah class MainActivity.java menjadi seperti di bawah ini :

package id.web.twoh.placesapitutorial;

import android.location.Location;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;


public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    private Location mLastLocation;
    private Button btLocation;
    private GoogleApiClient mGoogleApiClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupGoogleAPI();

        // initialize button
        btLocation = (Button) findViewById(R.id.bt_getLocation);
        btLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mLastLocation != null) {
                    Toast.makeText(MainActivity.this," Get Location \n " +
                            "Latitude : "+ mLastLocation.getLatitude()+
                            "\nLongitude : "+mLastLocation.getLongitude(), Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    private void setupGoogleAPI(){
        // initialize Google API Client
        mGoogleApiClient = new GoogleApiClient
                .Builder(this)
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    @Override
    protected void onStart() {
        super.onStart();
        // connect ke Google API Client ketika start
        mGoogleApiClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        // disconnect ke Google API Client ketika activity stopped
        mGoogleApiClient.disconnect();
    }

    @Override
    public void onConnected(Bundle bundle) {
        // get last location ketika berhasil connect 
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation != null) {
            Toast.makeText(this," Connected to Google Location API", Toast.LENGTH_LONG).show();
        }
    }


    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }
}

Pada kode di atas, bisa dilihat kita menggunakan GoogleAPIClient sebagai gateway untuk mengakses lokasi, dengan terlebih dahulu kita menambahkan LocationServices.API untuk memberitahu jika kita mau mengakses Fused Location API pada Google Play Services.

Kemudian class tersebut mengimplement interface GoogleApiClient.ConnectionCallbacks yang berguna sebagai listener apabila app kita sudah berhasil connect ke GoogleApiClient. Satu interface lain yang kita implement adalah GoogleApiClient.OnConnectionFailedListener berfungsi sebagai listener apabila aplikasi kita gagal terkoneksi dengan GoogleAPIClient.

Langkah selanjutnya lumayan straightforward, yaitu apabila aplikasi berhasil connect ke GoogleAPIClient, maka app akan meminta lokasi terakhir pengguna dan jika berhasil akan menampilkan sebuah Toast. Selanjutnya jika tombol “Get Location” diklik, maka akan muncul Toast yang menampilkan lokasi pengguna dalam bentuk latitude dan longitude nya.

Yang terakhir adalah, menambahkan dua buah permission ini ke AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Demo

Beginilah tampilan aplikasi ketika dijalankan.

Android Fused Location API

Ketika pertama kali dijalankan, akan muncul notifikasi berupa toast yang menandakan GoogleAPIClient telah berhasil tersambung ke services.

Setelah itu, apabila tombol Get Location diklik, akan muncul Toast yang berisi koordinat dari lokasi pengguna.

Kemudian kalian bisa bereksperimen dengan lokasi pengguna yang sudah kalian dapatkan tersebut, seperti menampilkannya di peta, atau mengirimnya ke server seperti aplikasi tracker. 🙂

That’s all. Source code bisa didownload di Github. Jangan lupa untuk star project nya dan juga follow GitHub saya. 🙂 Silahkan tanya di bagian komentar apabila ada yang kurang jelas.





Download aplikasi kami di Google Play Store


3 Comments

  1. rahmat arifin July 13, 2017
  2. rahmat arifin July 13, 2017

Leave a Reply