Last Updated on 8 years by Mas Herdi
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.
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.
Halo gan mau tanya ,ane coba tutorial ini selalu merah di import :
dan di build gradle nya juga tertulis error perintah compile
android studio v 2.2.3
sudah bisa ternyata gan hehe ,tapi masalah baru mulai lg ,setelah ane sync gradle supaya import nya bisa ,eh malah R. di oncreate jadi merah
Coba build / compile ulang gan
gan ini fungsinya apa?? —> private Location mLastLocation;
gan kalo public voidnya ku ubah ke public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
error gan
Mau tanya. Ketika saya mempunyai data lokasi geofire di firebase. Untuk menampilkannya ke dalam map beserta Marker nya bagaimana ya ?
Menarik belum research sampe sini gan 🙂
gan, ane nambahin textView untuk menambahkan fungsi set text, jadi programya nanti bukan menampilkan Toast Tapi Set Koordinat Lokasi User ke textView, Tapi setelah saya coba malah Cannot resolve method ‘setText(double)’
double nya dicast ke String dulu aja, pake
Mas, bila ingin menaruh nilai kordinatnya di textbox bagaimana ya ?
Mas, bila ingin menaruh nilai kordinatnya di textbox bagaimana ya ?
misal textbox1 berisi lat , tb2 longitude
bisa diintegrasikan aja dengan TextView di sini ada caranya https://www.twoh.co/2017/01/05/belajar-memahami-konsep-activity-dan-intent-di-android/