Membuat Aplikasi Android GPS & Location Based Sevice Menggunakan Eclipse
Pada bagian ini, Kamu akan mempelajari mengenai
- GPS pada android
- Google Map
- Map, Marker dan GPS
Trend teknologi sekarang dan kedepan salah satunya adalah teknologi mobile dengan fitur LBS nya. Dengan LBS, kita bisa mencari suatu lokasi dengan sangat mudah, mencari posisi teman,mempublish lokasi keberadaan kita sendiri, mencari rute jalan atau lainnya.
Suatu gadget katakanlah Android mendapatkan lokasi bisa dari GPS , Network Location Provider atau bisa juga keduanya. Cell-id (Simcard) dan wifi adalah contoh Network Location Provider.
Menentukan lokasi menggunakan Android itu gampanggampang susah, karena semakin akurat suatu lokasi semakin boros juga baterainya. Berikut ini adalah hal-hal yang menjadi kendala untuk menentukan lokasi
1. Multitude sumber lokasi
GPS, simcard dan wifi dapat dikombinasikan untuk mendapatkan lokasi yang akurat, namun efeknya jatuh ke baterai.
2. Perpindahan pengguna
Karena seorang pengguna melakukanperpindahan, maka aplikasi juga akan merefresh lokasi secara berulang.
3. Akurasi
Akurasi terhadap posisi suatu lokasi tidak konsisten. Posisi 10 menit yang lalu bisa jadi lebih akurat dibandingkan posisi yang terbaru.
Baik, agar cepat menjadi jago android, sekarang saatnya membuat aplikasi menentukan Latitude dan Longitude. Skenarionya kita bikin aplikasi yang bisa menangkap perubahan nilai longitude dan latitude. Setiap terjadi perubahan, nilai latitude dan longitude yang baru ditampilkan melalui Toast dan TextView. Kita bisa mengirim lokasi ke emulator menggunakan DDMS. DDMS dibahas lebih dalam dibagian xx. Hasil akhirnya tampak seperti gambar 14.1.

Gambar 14.1. Mengirim Lokasi ke emulator. (a) Bagian DDMS, (b) Emulator
1. Buat project baru
| Project name | PengenalanGPS |
|-----------------|-------------------|
| Build Target | Android 2.2 |
| Aplication name | Pengenalan GPS |
| Package name | Com.gps.sederhana |
| Create Activity | Lokasiku |
| Min SDK version | 8 |
2. Tambahkan beberapa baris kode pada Strings.xml
1: <?xml version="1.0" encoding="utf-8"?>
2: <resources>
3: <string name="hello">Lokasiku!</string>
4: <string name="app_name">pengenalan GPS</string>
5: <string name="latText">Latitude :</string>
6: <string name="lonText">Longitude :</string>
7: </resources>
3. Buat tampilan main.xml seperti berikut
1: <?xml version="1.0" encoding="utf-8"?>
2: <LinearLayout
3: xmlns:android="http://schemas.android.com/apk/res/android"
4: android:orientation="vertical"
5: android:layout_width="fill_parent"
6: android:layout_height="fill_parent">
7: <TextView android:id="@+id/textView1"
8: android:layout_width="wrap_content"
9: android:layout_height="wrap_content"
10: android:textStyle="bold"
11: android:text="@string/lonText"></TextView>
12: <TextView android:text="unknown"
13: android:id="@+id/longitutdeTxt"
14: android:layout_width="wrap_content"
15: android:layout_height="wrap_content"></TextView>
16: <TextView android:id="@+id/textView3"
17: android:layout_width="wrap_content"
18: android:layout_height="wrap_content"
19: android:textStyle="bold"
20: android:text="@string/latText"></TextView>
21: <TextView android:text="unknown"
22: android:id="@+id/latitudeTxt"
23: android:layout_width="wrap_content"
24: android:layout_height="wrap_content"></TextView>
25: </LinearLayout>
4. Sekarang kita ke activity Lokasiku.java, tambahkan kode berikut
1: package com.gps.sederhana;
2:
3: import android.app.Activity;
4: import android.content.Context;
5: import android.location.Location;
6: import android.location.LocationListener;
7: import android.location.LocationManager;
8: import android.os.Bundle;
9: import android.widget.TextView;
10: import android.widget.Toast;
11:
12: public class Lokasiku extends Activity {
13: private LocationManager lm;
14: private LocationListener locListener;
15: private TextView latTxt,lonTxt;
16:
17: /** Called when the activity is first created. */
18: @Override
19: public void onCreate(Bundle savedInstanceState) {
20: super.onCreate(savedInstanceState);
21: setContentView(R.layout.main);
22:
23: latTxt = (TextView) findViewById(R.id.latitudeTxt);
24: lonTxt = (TextView) findViewById(R.id.longitutdeTxt);
25: lm = (LocationManager)
26: getSystemService(Context.LOCATION_SERVICE);
27: locListener = new MyLocationListener();
28: lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
29: 200, locListener);
30: }
31:
32: private class MyLocationListener implements LocationListener
{
33: @Override
34: public void onLocationChanged(Location loc) {
35: if (loc != null) {
36: latTxt.setText(String.valueOf(loc.getLatitude()));
37: lonTxt.setText(String.valueOf(loc.getLongitude()));
38: Toast.makeText(getBaseContext(),
39: "Location Changed : Lat " + loc.getLatitude() +
40: "lgt: "+loc.getLongitude(), Toast.LENGTH_SHORT).show();
41: }
42: }
43: @Override
44: public void onProviderDisabled(String arg0) {}
45: @Override
46: public void onProviderEnabled(String arg0) {}
47: @Override
48: public void onStatusChanged(String provider, int status,
49: Bundle extras){}
50: }
51: }
5. Terakhir, tambhakan user.permission untuk mengakses GPS ke dalam Manifest
1: <?xml version="1.0" encoding="utf-8"?>
2: <manifest
xmlns:android="http://schemas.android.com/apk/res/android"
3: package="com.gps.sederhana" android:versionCode="1"
4: android:versionName="1.0">
5: <application android:icon="@drawable/icon"
6: android:label="@string/app_name">
7: <activity android:name=".Lokasiku"
8: android:label="@string/app_name">
9: <intent-filter>
10: <action android:name="android.intent.action.MAIN" />
11: <category
12: android:name="android.intent.category.LAUNCHER" />
13: </intent-filter>
14: </activity>
15: </application>
16: <uses-sdk android:minSdkVersion="8" />
17: <uses-permission
18: android:name="android.permission.ACCESS_FINE_LOCATION">
19: </uses-permission>
20: <uses-permission
21: android:name="android.permission.ACCESS_COARSE_LOCATION">
22: </uses-permission>
23: <uses-permission
24: android:name="android.permission.INTERNET">
25: </uses-permission>
26: </manifest>
Silakan dirun, sambil berpindah ke tampilan DDMS.
Penjelasan Program
Kita mulai dari Manifest, berikut ini rincian 3 permision yang baru saja ditambahkan
| ACCESS_COARSE_LOCATION | Izin untuk menentukan lokasi dari cell-id, wifi |
|------------------------|-------------------------------------------------|
| ACCESS_FINE_LOCATION | Izin untuk menentukan lokasi dari GPS |
| INTERNET | Izin untuk mengakses internet |
Tanpa menambahkan permission diatas, aplikasi yang kamu buat tidak akan gagal dalam menentukan lokasi.
Berikutnya lihat lagi activity Lokasiku.java, kita menggunakan 2 kelas baru yaitu class LocationListener dan class LocationManager. Class LocationManager berperan sebagai pintu masuk aplikasi untuk mengakses service lokasi pada Android. Service ini mengijinkan aplikasi untuk meng-update posisi secara periodik. Perhatikan baris 54, Parameter pertama pada requestLocationUpdates() adalah jenis system yang digunakan untuk menentukan lokasi, dalam hal ini kita menggunakan GPS. Jika ingin menentukan lokasi berdasarkan wifi, gantilah GPS_PROVIDER dengan NETWORK_PROVIDER. Parameter berikutnya adalah minimal waktu aplikasi melakukan update, sedangkan parameter ke 3 adalah jarak minimal. Jika minimal waktu diisi 60000 (ms) maka aplikasi akan melakukan update setiap 6 detik. Dalam project ini, jarak diisi dengan angka 200 (m) maka aplikasi akan melakukan update setiap melakukan perpindahan sejauh lebih dari 200m. Parameter terakhir adalah LocatinListener yang akan menangkap setiap terjadi proses update lokasi.
Saat terjadi perubahan lokasi atau saat proses update lokasi berlangsung, aplikasi mengirim sebuah sinyal yang kemudian ditangkap oleh class LocationListener. Didalam class ini, terdapat 4 method dengan rincian sebagai berikut:
- onLocationChanged(), dieksekusi ketika terjadi perubahan lokasi
- onProviderDisabled(), diekseskusi saat provider tidak aktif
- onProviderEnabled(), dipanggil saat provider aktif
- onStatusChanged(), dipanggil saat terjadi perubahan status pada provider seperti OUT_OF_SERVICE, AVAILABLE, atau TEMPORARILY_UNAVAILABLE.
Sumber
omayib.com