Tutorial Membangun Aplikasi Android Menggunakan Google Maps Dan Google Direction API _ Pratama...
-
Upload
sisco-lamato-dio -
Category
Documents
-
view
81 -
download
2
description
Transcript of Tutorial Membangun Aplikasi Android Menggunakan Google Maps Dan Google Direction API _ Pratama...
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 1/33
Tutorial Android SQLite Database
Tutorial Membangun Aplikasi Android MenggunakanGoogle Maps dan Google Direction API
Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API
Sebelumnya saya pernah membuat artikel tentang bagaimana penerapan google maps dan google
directions API pada sistem operasi android, melihat reaksi dari pembaca blog ini yang lumayan banyak,
saya memutuskan akan membuat kembali sebuah artikel yang mengangkat tema yang sama yakni
penerapan google maps dan google direction API pada Android.
Aplikasi yang akan saya buat kali ini adalah aplikasi penunjuk arah tempat makan yang ada dijogja,
gambarannya adalah pada map akan terdapat marker penunjuk lokasi tempat makan tersebut berada dan
ketika user melakukan klik marker maka akan muncul info window yang menampilkan informasi tentang
tempat makan tersebut, dan apabila user mengklik info window tersebut maka user akan dialihkan ke
jendela informasi mengenai tempat makan tersebut dan dijendela informasi tempat makan ini akan
menampilkan informasi tempat makan tersebut dan sebuah tombol untuk mendapatkan direction atau
penunjuk arah dari posisi user sekarang menuju lokasi tempat makan tersebut.
1. Menyiapkan Google Play Service LibraryDalam aplikasi yang akan saya buat ini, saya akan menerapkan Google Maps API V2 dimana google maps
api itu sendiri merupakan bagian dari google play service library, maka dari itu jika anda belum menginstall
Google play service library silahkan anda menginstallnya, melalui menu Window > Android SDK Manager
google api
Setelah anda menginstall Google Play Service Library langkah selanjutnya adalah melakukan import
Google Play Service Library kedalam workspace anda. . caranya adalah Klik Menu File Import > General >
Existing Project into Workspace > Browse kemudian masuk kedalam folder sdk android anda.. perhatikan
gambar berikut ini. .
Google Play Service Library
yang perlu saya tekankan disini adalah, posisi Folder Android SDK anda harus dalam satu drive yang
sama dengan tempat penyimpanan project yang akan anda buat nanti, dikarena dari pengalaman yang
Home Android Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 2/33
saya temukan kemarin, ada beberapa project yang muncul error dikarenakan library tidak berhasil ke import
kedalam project.
2. Mendapatkan API Key untuk Google Mapsuntuk dapat menampilkan Google Maps kedalam aplikasi, kita membutuhkan API Key yang akan kita
dapatkan dari developer console. Sebelum registrasi api key, kita akan membuat fingerprint SHA1 yang
dibutuhkan nanti saat registrasi API Key. Untuk membuat fingerprint sha1 kita menggunakan
debug.keystore yang akan digenerate oleh eclipse ketika kita running suatu aplikasi. Secara default
debug.keystore akan berada didalam folder .android didalam folder user. . lihat screenshot berikut :
debug keystore
setelah anda berada didalam folder .android gunakan perintah berikut untuk mendapatkan fingerprint sha1
anda
setelah anda menjalankan perintah diatas maka akan muncul fingerprint sha1 milik anda
Fingerprint SHA1
Setelah itu arahkan browser anda ke Apis Console create project baru, kemudian pastikan pada bagian
services pilihan Google Maps Android V2 pada posisi ON. Kemudian anda tinggal gunakan pilihan Create
new Android Key dan masukkan fingerprint sha1 anda beserta nama package aplikasi anda.. contoh dalam
project kali ini nama package saya adalah id.pratama.tempatmakanjogja
3. Membuat Project Android BaruLangkah selanjutnya setelah kita mendapatkan apikey adalah membuat project androidnya, sebelumn jauh
disini saya menginformasikan dalam project ini saya menggunakan ADT Versi 21.1 dan target SDK API 17.
Untuk membuat project baru, masuk menu File > New > Android Application Project
1 keytool -list -alias androiddebugkey -keystore debug.keystore -storepassandroid -keypass android -v
1 45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;id.pratama.tempatmakanjogja
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 3/33
Tempat Makan Jogja 1
langsung next saja, sampai kita mendapatkan project seperti dibawah ini
Langkah selanjutnya menambahkan Google Play Service libray kedalam project yang barusan kita buat
tadi.. caranya adalah Klik Kanan pada nama project Tempat Makan Jogja kemudian pilih menu properties
> Android > Add kemudian tambahkan library google play servicenya..
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 4/33
setelah anda menambahkan library google play servicesnya langkah selanjutnya yang musti anda lakukan
adalah merubah file activity_main.xml menjadi seperti berikut ini. .
pada file activity_main.xml saya menggunakan RelativeLayout dan menambahkan sebuah fragment untuk
menampilkan maps kita nanti.
Selanjutnya kita harus merubah file MainActivity.java menjadi seperti berikut ini
Pada file ini yang dirubah hanyalah superClassnya, untuk menggunakan Maps V2 activity harus mewarisi
kelas FragmentActivity
File selanjutnya yang mesti dirubah adalah AndroidManifest.xml kita perlu menambahkan beberapa
permission agar aplikasi kita dapat menampilkan maps.
Yang pertama adalah
01 06 11
01 package id.pratama.tempatmakanjogja;0203 import android.os.Bundle;04 import android.support.v4.app.FragmentActivity;05 import android.view.Menu;0607 public class MainActivity extends FragmentActivity08 {0910 @Override
11 protected void onCreate(Bundle savedInstanceState)12 {13 super.onCreate(savedInstanceState);14 setContentView(R.layout.activity_main);15 }1617 @Override18 public boolean onCreateOptionsMenu(Menu menu)19 {20 // Inflate the menu; this adds items to the action bar if it is
present.21 getMenuInflater().inflate(R.menu.main, menu);22 return true;23 }2425 }
1
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 5/33
selanjutnya adalah
perhatikan penamaan package, sesuaikan dengan nama package anda. Dan yang terakhir adalah
menambahkan apikey didalam tag application
maka hasil akhirnya akan seperti berikut ini..
kemudian coba anda jalankan project tersebut.. maka akan keluar tampilan sebagai berikut
2
3 4 5 6
1
2 5
1
01 02 06 09 10
11
12
13
14
15
16 19 22 27 30 33 34 35 36 37 38
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 6/33
Tempat Makan Jogja
untuk anda ketahui Google Maps API Versi 2 tidak dapat dijalankan langsung melalui emulator, untuk dapat
menjalankan project android yang menggunakan Maps API Versi 2 perlu sedikit setting yakni menginstall
google play kedalam emulator yang akan menjalankan project kita.. Saya sudah menyiapkan sebuah file
yang berisi vending dan google gms link donwload
Setelah anda mendownload file tersebut langkah selanjutnya adalah setting path untuk ADB, disini kita
membutuhkan perintah adb yang dijalankan melalui command prompt. File adb sendiri ada didalam folder
android sdk platform-tools selanjutnya jalankan emulator anda dan cek dengan perintah berikut . .
Tempat Makan Jogja
terlihat emulator kita telah terdeteksi oleh adb, langkah selanjutnya adalah melakukan instalasi vending dan
gms, silahkan anda masuk kedalam folder dimana file hasil extrack tadi anda tempatkan. Kemudian
lakukan perintah . .
1 adb devices
1 adb install nama_file_apk
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 7/33
Tempat Makan Jogja
kemudian coba jalankan kembali project anda. .
Tempat Makan Jogja
sampai pada tahap ini kita sudah dapat memunculkan peta didalam aplikasi kita, langkah selanjutnya
adalah memunculkan lokasi kita saat ini. Pada file MainActivity.java saya menambahkan 3 buah method,,
yang pertama adalah. .
pada method setupMapIfNeeded() ini saya mengInisialisasi maps jika maps sudah tidak null lagi maka
selanjutnya adalah memanggil method setupMap()
Pada google maps v2, google sudah menambahkan sebuah fungsi untuk menampilkan posisi kita saat ini
01 private void setupMapIfNeeded()02 {03 if (map == null)04 {05 FragmentManager fragmentManager = getSupportFragmentManager();06 SupportMapFragment supportMapFragment = (SupportMapFragment)
fragmentManager.findFragmentById(R.id.maps);07 map = supportMapFragment.getMap();0809 if (map != null)10 {11 setupMap();12 }13 }1415 }
1 private void setupMap()2 {3 map.setMyLocationEnabled(true);4 moveToMyLocation();
5 }
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 8/33
dan sebuah tombol yang apabila kita tekan maka akan membawa kita ke posisi kita saat ini, fungsi itu
dapat dipanggil dengan cara
selanjutnya, didalam method setupMap terdapat method moveToMyLocation() yang berisi sebagai berikut
pada method ini saya menggunakan class LocationManager untuk mendapatkan posisi saat ini, dan
apabila posisi sudah ditemukan makan map akan dianimasikan menuju lokasi tersebut. File
MainActivity.java secara keseluruhan akan nampak sebagai berikut :
1 map.setMyLocationEnabled(true);
01 private void moveToMyLocation()02 {03 LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);04 Criteria criteria = new Criteria();0506 Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,false));
07 if (location != null)08 {09 map.animateCamera(CameraUpdateFactory.newLatLngZoom(10 new LatLng(location.getLatitude(),
location.getLongitude()), 13));11 }12 }
01 package id.pratama.tempatmakanjogja;02 03 import com.google.android.gms.common.ConnectionResult;04 import com.google.android.gms.common.GooglePlayServicesUtil;05 import com.google.android.gms.maps.CameraUpdateFactory;06 import com.google.android.gms.maps.GoogleMap;07 import com.google.android.gms.maps.SupportMapFragment;08 import com.google.android.gms.maps.model.LatLng;09 10 import android.content.Context;11 import android.location.Criteria;12 import android.location.Location;13 import android.location.LocationManager;14 import android.os.Bundle;15 import android.support.v4.app.FragmentActivity;16 import android.support.v4.app.FragmentManager;17 import android.view.Menu;18 19 public class MainActivity extends FragmentActivity20 {21 private GoogleMap map;2223 @Override24 protected void onCreate(Bundle savedInstanceState)25 {26 super.onCreate(savedInstanceState);27 setContentView(R.layout.activity_main);28 setupMapIfNeeded();29 }3031 private void setupMapIfNeeded()32 {33 if (map == null)34 {
35 FragmentManager fragmentManager = getSupportFragmentManager();36 SupportMapFragment supportMapFragment = (SupportMapFragment)
fragmentManager.findFragmentById(R.id.maps);37 map = supportMapFragment.getMap();3839 if (map != null)40 {41 setupMap();42 }43 }4445 }4647 private void setupMap()48 {49 map.setMyLocationEnabled(true);50 moveToMyLocation();51 }5253 private void moveToMyLocation()54 {55 LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);56 Criteria criteria = new Criteria();5758 Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,false));
59 if (location != null)60 {
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 9/33
sebelum anda menjalankan project ini, kita harus terlebih dahulu mengirimkan lokasi koordinat kedalam
emulator kita, cara ini dapat dilakukan melalui DDMS > kemudian Emulator Control
Tempat Makan Jogja
jika anda sudah mengirimkan koordinat tersebut selanjutnya adalah mencoba menjalankan projectnya. .
Tempat Makan Jogja
Selanjutnya adalah bagaimana caranya menampilkan lokasi tempat makannya, disini saya membuat
sebuah API yang menampilkan data tempat makan, alamatnya serta lokasi latitude dan longitudenya.. api
yang saya buat dapat diakses melalui url berikut
61 map.animateCamera(CameraUpdateFactory.newLatLngZoom(62 new LatLng(location.getLatitude(),
location.getLongitude()), 13));63 }64 }6566 @Override67 public boolean onCreateOptionsMenu(Menu menu)68 {69 // Inflate the menu; this adds items to the action bar if it is
present.70 getMenuInflater().inflate(R.menu.main, menu);71 return true;72 }7374 @Override75 protected void onResume()76 {77 // TODO Auto-generated method stub78 super.onResume();7980 int resCode =
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());81 if (resCode != ConnectionResult.SUCCESS)82 {83 GooglePlayServicesUtil.getErrorDialog(resCode, this, 1);84 }85 }8687 }
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 10/33
struktur table untuk api yang saya buat adalah sebagai berikut :
Tempat Makan Jogja
dan untuk script phpny adalah sebagai berikut :
setelah selesai membuat sebuah API, langkah selanjutnya adalah kita mempersiapkan sebuah class
untuk menangani pertukaran antara data dari webservice/api ke device android kita. Pertama saya
mempersiapkan sebuah class Entity yang berisikan variable untuk data yang ada dari APInya.. berikut
classnya.. saya beri nama TempatMakan.java
1 http://api.pratamawijaya.com/tempatmakan.php
01
01 /*02 * Pratama Nur Wijaya (c) 201303 *04 * Project : Tempat Makan Jogja05 * Filename : TempatMakan.java06 * Creation Date : Apr 7, 2013 time : 1:54:50 PM07 *08 */09 10 package id.pratama.tempatmakanjogja.entity;11 12 public class TempatMakan13 {14 private int id;15 private String nama;16 private String alamat;
17 private double lat;18 private double lng;1920 public TempatMakan()21 {22 // TODO Auto-generated constructor stub23 }2425 public TempatMakan(int id, String nama, String alamat, double lat, double
lng)26 {27 super();28 this.id = id;29 this.nama = nama;30 this.alamat = alamat;31 this.lat = lat;32 this.lng = lng;33 }3435 public String getNama()36 {
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 11/33
class ini hanya berisi variable, konstruktor, dan method getter dan setter.
Selanjutnya adalah mempersiapkan class JSONHelper untuk menangani data JSONnya, class ini saya
adopsi dari beberapa tutorial yang ada seperti dari AndroidHive
37 return nama;38 }3940 public void setNama(String nama)41 {42 this.nama = nama;43 }4445 public String getAlamat()46 {47 return alamat;48 }4950 public void setAlamat(String alamat)51 {52 this.alamat = alamat;53 }5455 public double getLat()56 {57 return lat;58 }5960 public void setLat(double lat)61 {62 this.lat = lat;63 }6465 public double getLng()66 {67 return lng;68 }6970 public void setLng(double lng)71 {72 this.lng = lng;73 }7475 }
001 /*002 * Pratama Nur Wijaya (c) 2013003 *
004 * Project : Tempat Makan Jogja005 * Filename : JSONHelper.java006 * Creation Date : Apr 7, 2013 time : 1:47:27 PM007 *008 */009 010 package id.pratama.tempatmakanjogja;011 012 import id.pratama.tempatmakanjogja.entity.TempatMakan;013 014 import java.io.BufferedReader;015 import java.io.IOException;016 import java.io.InputStream;017 import java.io.InputStreamReader;018 import java.io.UnsupportedEncodingException;019 import java.util.ArrayList;020 021 import org.apache.http.HttpEntity;022 import org.apache.http.HttpResponse;023 import org.apache.http.client.ClientProtocolException;024 import org.apache.http.client.methods.HttpGet;025 import org.apache.http.impl.client.DefaultHttpClient;026 import org.json.JSONArray;027 import org.json.JSONException;028 import org.json.JSONObject;029 030 import android.util.Log;031 032 public class JSONHelper033 {034 private InputStream is = null;035 private JSONObject jsonObject = null;036 private String json = "";037038 private final String TAG_TEMPATMAKAN = "tempatmakan";039 private final String TAG_ID = "id";040 private final String TAG_NAMA = "nama";041 private final String TAG_ALAMAT = "alamat";042 private final String TAG_LAT = "lat";043 private final String TAG_LNG = "lng";044045 public JSONObject getJSONFromURL(String url)046 {047 try048 {049 DefaultHttpClient httpClient = new DefaultHttpClient();050 HttpGet httpGet = new HttpGet(url);051
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 12/33
Sampai sini class untuk menangani data dari webservice sudah selesai dibuat, untuk penerapannya rubah
file MainActivity.java menjadi sebagai berikut :
052 HttpResponse httpResponse = httpClient.execute(httpGet);053 HttpEntity httpEntity = httpResponse.getEntity();054 is = httpEntity.getContent();055 } catch (UnsupportedEncodingException e)056 {057 e.printStackTrace();058 } catch (ClientProtocolException e)059 {060 e.printStackTrace();061 } catch (IOException e)062 {063 e.printStackTrace();064 }065 066 try067 {068 BufferedReader reader = new BufferedReader(new InputStreamReader(069 is, "iso-8859-1"), 8);070 071 StringBuilder sb = new StringBuilder();072 String line = null;073
074 while ((line = reader.readLine()) != null)075 {076 sb.append(line + "\n");077 }078 079 is.close();080 json = sb.toString();081 } catch (Exception e)082 {083 // TODO: handle exception084 }085 086 try087 {088 jsonObject = new JSONObject(json);089 090 } catch (JSONException e)091 {092 // TODO: handle exception093 }094 095 return jsonObject;096 }097 098 public ArrayList getTempatMakanAll(JSONObject jobj)099 {100 ArrayList listTempatMakan = new ArrayList
();101 102 try103 {104 JSONArray arrayTempatMakan = jobj.getJSONArray(TAG_TEMPATMAKAN);105 106 for (int i = 0; i < arrayTempatMakan.length(); i++)107 {108 JSONObject jobject = arrayTempatMakan.getJSONObject(i);109 110 Log.d("log", "muter ke " + i);111 listTempatMakan.add(new
TempatMakan(jobject.getInt(TAG_ID),jobject.getString(TAG_NAMA),jobject.getString(TAG_ALAMAT), jobject
112 .getDouble(TAG_LAT), jobject.getDouble(TAG_LNG)));113 114 }115 } catch (JSONException e)116 {117 e.printStackTrace();118 }119 return listTempatMakan;120 }121 }
001 package id.pratama.tempatmakanjogja;002 003 import id.pratama.tempatmakanjogja.entity.TempatMakan;004 005 import java.util.ArrayList;006 007 import org.json.JSONObject;008 009 import com.google.android.gms.common.ConnectionResult;010 import com.google.android.gms.common.GooglePlayServicesUtil;011 import com.google.android.gms.maps.CameraUpdateFactory;012 import com.google.android.gms.maps.GoogleMap;013 import com.google.android.gms.maps.SupportMapFragment;
014 import com.google.android.gms.maps.model.LatLng;015 import com.google.android.gms.maps.model.MarkerOptions;016 017 import android.app.ProgressDialog;
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 13/33
018 import android.content.Context;019 import android.location.Criteria;020 import android.location.Location;021 import android.location.LocationManager;022 import android.os.AsyncTask;023 import android.os.Bundle;024 import android.support.v4.app.FragmentActivity;025 import android.support.v4.app.FragmentManager;026 import android.view.Menu;027 028 public class MainActivity extends FragmentActivity029 {030 private GoogleMap map;031 private JSONHelper json;032 private ProgressDialog pDialog;033 034 private ArrayList listTempatMakan;035 private final String URL_API =
"http://api.pratamawijaya.com/tempatmakan.php";036 037 @Override038 protected void onCreate(Bundle savedInstanceState)039 {040 super.onCreate(savedInstanceState);041 setContentView(R.layout.activity_main);042 json = new JSONHelper();043 044 new AsynTaskMain().execute();045 046 setupMapIfNeeded();047 }048 049 private void setupMapIfNeeded()050 {051 if (map == null)052 {053 FragmentManager fragmentManager = getSupportFragmentManager();054 SupportMapFragment supportMapFragment = (SupportMapFragment)
fragmentManager.findFragmentById(R.id.maps);055 map = supportMapFragment.getMap();056 057 if (map != null)058 {059 setupMap();060 }061 }062 063 }064 065 private void setupMap()066 {067 map.setMyLocationEnabled(true);068 moveToMyLocation();069 }070 071 private void moveToMyLocation()072 {073 LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);074 Criteria criteria = new Criteria();075 076 Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,false));
077 if (location != null)078 {
079 map.animateCamera(CameraUpdateFactory.newLatLngZoom(080 new LatLng(location.getLatitude(),
location.getLongitude()), 13));081 }082 }083 084 @Override085 public boolean onCreateOptionsMenu(Menu menu)086 {087 // Inflate the menu; this adds items to the action bar if it is
present.088 getMenuInflater().inflate(R.menu.main, menu);089 return true;090 }091 092 @Override093 protected void onResume()094 {095 // TODO Auto-generated method stub096 super.onResume();097 098 int resCode =
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());099 if (resCode != ConnectionResult.SUCCESS)100 {101 GooglePlayServicesUtil.getErrorDialog(resCode, this, 1);102 }103 }104 105 private class AsynTaskMain extends AsyncTask106 {
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 14/33
saya jelaskan sebisa saya , pertama untuk mendapatkan data dari webservice kita menggunakan
bantuan class JSONHelper, pada baris 31 kita inisialisasi untuk class JSONHelper dengan nama objek
json. Kemudian untuk instansiasinya dilakukan pada baris 42
Kemudian, pada android versi 3.0 keatas, kita tidak dapat langsung menjalankan method yang
berhubungan dengan acces httpclient, kita harus memisahkan eksekusi method tersebut dari thread
utama, maka disini kita membutuhkan sebuah class AsyncTask untuk menangani eksekusi method dari
json helper. Pada class MainActivity.java saya menambahkan sebuah inner class yang saya beri nama
AsynTaskMain. Pada class AsynTask ini terdapat 3 buah method yaitu :
- doInBackground : Pada method inilah proses eksekusi method dari json
- onPreExecute : Pada method ini maksudnya adalah, apa yang akan dijalankan sebelum mengEksesuki
doinBackground, dalam method ini saya menampilkan sebuah progress dialog yang akan menampilkan
teks Loading.
- onPostExecute : Method ini adalah method yang akan dijalankan ketika prosess di method
doInbackground selesai dijalankan.
Kemudian coba anda jalankan projectnya ..
107 108 @Override109 protected void onPostExecute(Void result)110 {111 // TODO Auto-generated method stub112 pDialog.dismiss();113 runOnUiThread(new Runnable()114 {115 116 @Override117 public void run()118 {119 // TODO Auto-generated method stub120 for (int i = 0; i < listTempatMakan.size(); i++)121 {122 map.addMarker(new MarkerOptions()123 .position(new
LatLng(listTempatMakan.get(i).getLat(), listTempatMakan.get(i).getLng()))124 .title(listTempatMakan.get(i).getNama())125 .snippet(listTempatMakan.get(i).getAlamat()));126 127 }128 }129 });130 131 super.onPostExecute(result);132 }133 134 @Override135 protected void onPreExecute()136 {137 // TODO Auto-generated method stub138 super.onPreExecute();139 pDialog = new ProgressDialog(MainActivity.this);140 pDialog.setMessage("Loading....");141 pDialog.setCancelable(true);142 pDialog.show();143 }144
145 @Override146 protected Void doInBackground(Void... params)147 {148 // TODO Auto-generated method stub149 150 JSONObject jObject = json.getJSONFromURL(URL_API);151 listTempatMakan = json.getTempatMakanAll(jObject);152 return null;153 }154 }155 156 }
1 json = new JSONHelper();
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 15/33
Tempat Makan Jogja
Selanjutnya yang akan kita tangani adalah, jika user klik infowindow yang ada, misal dari contoh diatas
ketika user mengKlik infoWindow untuk marker Warung SS RingRoad Utara maka akan muncul sebuah
layout baru yang akan berisikan informasi mengenai Warung SS RingRoad utara dan sebuah tombol untuk
menampilkan directions dari lokasi user saat ini menuju Warung SS RingRoad Utara.
Agar infowindow kita dapat diklik, maka kita harus menambahkan action ke setiap marker yang ada. Action
ini didapat dari interface onInfoWindowClickListener, anda tinggal mengimplementkan interface ini ke class
MainActivity.java hasil akhirnya akan seperti ini :
001 package id.pratama.tempatmakanjogja;002 003 import id.pratama.tempatmakanjogja.entity.TempatMakan;004 import java.util.List;005 import org.json.JSONObject;006 import com.google.android.gms.common.ConnectionResult;007 import com.google.android.gms.common.GooglePlayServicesUtil;008 import com.google.android.gms.maps.CameraUpdateFactory;009 import com.google.android.gms.maps.GoogleMap;010 import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;011 import com.google.android.gms.maps.SupportMapFragment;012 import com.google.android.gms.maps.model.LatLng;013 import com.google.android.gms.maps.model.Marker;014 import com.google.android.gms.maps.model.MarkerOptions;015 import android.app.ProgressDialog;016 import android.content.Context;017 import android.content.Intent;018 import android.location.Criteria;019 import android.location.Location;020 import android.location.LocationManager;021 import android.os.AsyncTask;022 import android.os.Bundle;023 import android.support.v4.app.FragmentActivity;024 import android.support.v4.app.FragmentManager;
025 import android.view.Menu;026 027 public class MainActivity extends FragmentActivity implements
OnInfoWindowClickListener028 {029 private GoogleMap map;030 private JSONHelper json;031 private ProgressDialog pDialog;032 private LatLng myLocation;033 034 private List listTempatMakan;035 private final String URL_API =
"http://api.pratamawijaya.com/tempatmakan.php";036 037 public static final String KEY_NAMA = "nama";038 public static final String KEY_ALAMAT = "alamat";039 public static final String KEY_LAT_TUJUAN = "lat_tujuan";040 public static final String KEY_LNG_TUJUAN = "lng_tujuan";041 public static final String KEY_LAT_ASAL = "lat_asal";042 public static final String KEY_LNG_ASAL = "lng_asal";043 044 @Override045 protected void onCreate(Bundle savedInstanceState)046 {047 super.onCreate(savedInstanceState);048 setContentView(R.layout.activity_main);
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 16/33
049 json = new JSONHelper();050 051 new AsynTaskMain().execute();052 053 setupMapIfNeeded();054 }055 056 private void setupMapIfNeeded()057 {058 if (map == null)059 {060 FragmentManager fragmentManager = getSupportFragmentManager();061 SupportMapFragment supportMapFragment = (SupportMapFragment)
fragmentManager.findFragmentById(R.id.maps);062 map = supportMapFragment.getMap();063 064 if (map != null)065 {066 setupMap();067 }068 }069 070 }071 072 private void setupMap()073 {074 map.setMyLocationEnabled(true);075 map.setOnInfoWindowClickListener(this);076 moveToMyLocation();077 }078 079 private void moveToMyLocation()080 {081 LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);082 Criteria criteria = new Criteria();083 084 Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,false));
085 if (location != null)086 {087 map.animateCamera(CameraUpdateFactory.newLatLngZoom(088 new LatLng(location.getLatitude(),
location.getLongitude()), 13));
089 }090 }091 092 @Override093 public boolean onCreateOptionsMenu(Menu menu)094 {095 // Inflate the menu; this adds items to the action bar if it is
present.096 getMenuInflater().inflate(R.menu.main, menu);097 return true;098 }099 100 @Override101 protected void onResume()102 {103 // TODO Auto-generated method stub104 super.onResume();105 106 int resCode =
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());107 if (resCode != ConnectionResult.SUCCESS)108 {109 GooglePlayServicesUtil.getErrorDialog(resCode, this, 1);110 }111 }112 113 private class AsynTaskMain extends AsyncTask114 {115 116 @Override117 protected void onPostExecute(Void result)118 {119 // TODO Auto-generated method stub120 pDialog.dismiss();121 runOnUiThread(new Runnable()122 {123 124 @Override125 public void run()126 {127 // TODO Auto-generated method stub128 for (int i = 0; i < listTempatMakan.size(); i++)129 {130 131 map.addMarker(new MarkerOptions()132 .position(new
LatLng(listTempatMakan.get(i).getLat(),133 listTempatMakan.get(i).getLng()))134 .title(listTempatMakan.get(i).getNama())135 .snippet(listTempatMakan.get(i).getAlamat()));136 137 }
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 17/33
ketika anda sudah mengImplement interface onInfoWindowClickListener dan masih error, itu berarti anda
belom mengImplement method yang ada pada interface onInfoWindowClickListener, tinggal anda klik balon
lampu merah kemudian unImplementMethod sehingga akan menambahkan sebuah method baru yakni
onInfoWindowClick. Action onInfoWindowClickListener tidak akan bejalan jika anda tidak mengSet action
tersebut ke map anda, maka tambahkan pada method setupMap()
Pada method onInfoWindowClick akan ditambahkan sebuah logic, ketika user mengKlik infowindow
tersebut maka kita akan berpindah halaman menuju halaman infotempatmakan, dan pada halaman
tersebut akan tampil nama, dan alamat tempat makan yang kita pilih dan sebuah button Direction. Pada
method ini juga akan terjadi perpindahan activity dengan membawa beberapa variable yang saya butuhkan
untuk activity infotempatmakan, untuk transfer data antar activity saya menggunakan class Bundle.
Untuk anda ketahui setiap marker yang dibuat diatas map memiliki sebuah nilai id berdasarkan urutan
marker itu dibuat. Seperti halnya array yang selalu dimulai dari index 0, begitu pula marker akan memiliki id
m0, m1,m2 dan seterusnya. Disini saya membutuhkan angkanya saja, sehingga untuk mengambil
angkanya saja dapat dengan code berikut :
kenapa saya mengambil berupa angkanya saja, dikarena sebelumnya saya menyimpan data lokasi tempat
makan pada sebuah List, dan untuk mengakses list tersebut saya menggunakan indexnya
Selanjutnya adalah tinggal memasukkan ke bundle apa saja nilai/value yang akan saya transfer ke avtivity
138 }139 });140 141 super.onPostExecute(result);142 }143 144 @Override145 protected void onPreExecute()146 {147 // TODO Auto-generated method stub148 super.onPreExecute();149 pDialog = new ProgressDialog(MainActivity.this);150 pDialog.setMessage("Loading....");151 pDialog.setCancelable(true);152 pDialog.show();153 }154
155 @Override156 protected Void doInBackground(Void... params)157 {158 // TODO Auto-generated method stub159 160 JSONObject jObject = json.getJSONFromURL(URL_API);161 listTempatMakan = json.getTempatMakanAll(jObject);162 return null;163 }164 }165 166 @Override167 public void onInfoWindowClick(Marker marker)168 {169 // marker id -> m0, m1, m2 dst..170 String id = marker.getId();171 id = id.substring(1);172 173 myLocation = new LatLng(map.getMyLocation().getLatitude(),
map.getMyLocation().getLongitude());174 175 if (myLocation != null)176 {177 Bundle bundle = new Bundle();178 bundle.putString(KEY_NAMA,
listTempatMakan.get(Integer.parseInt(id)).getNama());179 bundle.putString(KEY_ALAMAT,
listTempatMakan.get(Integer.parseInt(id)).getAlamat());180 bundle.putDouble(KEY_LAT_TUJUAN, marker.getPosition().latitude);181 bundle.putDouble(KEY_LNG_TUJUAN, marker.getPosition().longitude);182 bundle.putDouble(KEY_LAT_ASAL, myLocation.latitude);183 bundle.putDouble(KEY_LNG_ASAL, myLocation.longitude);184 185 Intent i = new Intent(MainActivity.this,
InfoTempatMakanActivity.class);186 i.putExtras(bundle);187 startActivity(i);188 189 } else190 {191 Toast.makeText(this, "Tidak dapat menemukan lokasi anda ",
Toast.LENGTH_LONG).show();192 }193 }194 }
1 map.setOnInfoWindowClickListener(this);
1 String id = marker.getId();2 id = id.substring(1);
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 18/33
infotempatmakan..
Langkah selanjutnya anda membuat activity baru, caranya File > New > Other > Android > Android Activity
Tempat Makan Jogja
Beri nama InfoTempatMakanActivity
fitur ini sebelumnya tidak ada, pada adt versi sebelumnya untuk membuat activity kita harus membuat class
terlebih dahulu dan mengExtendskan ke Activity, kemudian mengoverride method onCreate, kemudian
membuat file layoutnya, dan terakhir menambakan ke file manifest, cukup memakan waktu, namun
sekarang tidak lagi dikarenaka fitur keren ini secara otomatis kita akan dibuatkan sebuah layout dan
mendaftarkan activity kita kedalam file manifest.
Untuk layout infotempatmakan saya membuatnya seperti ini
cukup sederhana, hanya terdiri dari 2 TextView, dan sebuah Button
1 bundle.putString(KEY_NAMA,listTempatMakan.get(Integer.parseInt(id)).getNama());
2 bundle.putString(KEY_ALAMAT,listTempatMakan.get(Integer.parseInt(id)).getAlamat());
3 bundle.putDouble(KEY_LAT, marker.getPosition().latitude);4 bundle.putDouble(KEY_LNG, marker.getPosition().longitude);
01 10 15 22 29
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 19/33
Untuk class InfoTempatMakanActivity saya membuatnya seperti berikut ini :
yang perlu diperhatikan pada class ini adalah bagian beriku :
01 /*02 * Pratama Nur Wijaya (c) 201303 *04 * Project : Tempat Makan Jogja05 * Filename : InfoTempatMakanActivity.java06 * Creation Date : Apr 7, 2013 time : 1:47:27 PM07 *08 */09 10 package id.pratama.tempatmakanjogja;11 12 import com.google.android.gms.maps.model.LatLng;13 import android.os.Bundle;14 import android.app.Activity;15 import android.content.Intent;16 import android.view.View;17 import android.view.View.OnClickListener;18 import android.widget.Button;19 import android.widget.TextView;20 21 public class InfoTempatMakanActivity extends Activity implements
OnClickListener22 {23 24 private TextView tvNama;25 private TextView tvAlamat;26 private Button btnGetDirection;27 28 private LatLng lokasiTujuan;29 private LatLng lokasiAwal;
30 private String nama;31 private String alamat;32 33 @Override34 protected void onCreate(Bundle savedInstanceState)35 {36 super.onCreate(savedInstanceState);37 setContentView(R.layout.activity_info_tempat_makan);38 39 initialize();40 41 Bundle bundle = getIntent().getExtras();42 if (bundle != null)43 {44 nama = bundle.getString(MainActivity.KEY_NAMA);45 alamat = bundle.getString(MainActivity.KEY_ALAMAT);46 lokasiTujuan = new
LatLng(bundle.getDouble(MainActivity.KEY_LAT_TUJUAN),47 bundle.getDouble(MainActivity.KEY_LNG_TUJUAN));48 lokasiAwal = new
LatLng(bundle.getDouble(MainActivity.KEY_LAT_ASAL),49 bundle.getDouble(MainActivity.KEY_LNG_ASAL));50 }51 52 setTeksView();53 54 }55 56 private void setTeksView()57 {58 tvNama.setText(nama);59 tvAlamat.setText(alamat);60 }61 62 private void initialize()63 {64 tvAlamat = (TextView) findViewById(R.id.alamatTempatMakan);65 tvNama = (TextView) findViewById(R.id.namaTempatMakan);66 btnGetDirection = (Button) findViewById(R.id.btnDirection);67 btnGetDirection.setOnClickListener(this);68 }69 70 @Override71 public void onClick(View v)72 {73 Bundle bundle = new Bundle();74 bundle.putDouble(MainActivity.KEY_LAT_ASAL, lokasiAwal.latitude);75 bundle.putDouble(MainActivity.KEY_LNG_ASAL, lokasiAwal.longitude);76 bundle.putDouble(MainActivity.KEY_LAT_TUJUAN, lokasiTujuan.latitude);77 bundle.putDouble(MainActivity.KEY_LNG_TUJUAN,
lokasiTujuan.longitude);78 bundle.putString(MainActivity.KEY_NAMA, nama);79 80 Intent intent = new Intent(this, DirectionActivity.class);81 intent.putExtras(bundle);82 83 startActivity(intent);84 }85 86 }
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 20/33
potongan kode diatas digunakan untuk mengambil data yang diberikan oleh activity sebelumnya, data ini
berupa nama, alamat dan latitude longitude lokasi yang dituju..
kemudian untuk penanganan tombol direction berada pada method berikut ini :
tampilan dari infotempat makan akan seperti berikut ini:
Tempat Makan Jogja
Langkah terakhir adalah membuat activity untuk directionsnya.. silahkan anda buat kembali satu buah
activity, pada contoh kali ini saya beri nama DirectionActivity. Untuk layoutnya tidak berbeda jauh dengan
layout untuk maps sebelumnya, berikut ini layout directionacitvity :
sedangkan untuk class nya adalah seperti berikut ini :
01 Bundle bundle = getIntent().getExtras();02 if (bundle != null)03 {04 nama = bundle.getString(MainActivity.KEY_NAMA);05 alamat = bundle.getString(MainActivity.KEY_ALAMAT);06 lokasiTujuan = new
LatLng(bundle.getDouble(MainActivity.KEY_LAT_TUJUAN),
07 bundle.getDouble(MainActivity.KEY_LNG_TUJUAN));08 lokasiAwal = new
LatLng(bundle.getDouble(MainActivity.KEY_LAT_ASAL),09 bundle.getDouble(MainActivity.KEY_LNG_ASAL));10 }
01 @Override02 public void onClick(View v)03 {04 Bundle bundle = new Bundle();05 bundle.putDouble(MainActivity.KEY_LAT_ASAL, lokasiAwal.latitude);06 bundle.putDouble(MainActivity.KEY_LNG_ASAL, lokasiAwal.longitude);07 bundle.putDouble(MainActivity.KEY_LAT_TUJUAN, lokasiTujuan.latitude);08 bundle.putDouble(MainActivity.KEY_LNG_TUJUAN, lokasiTujuan.longitude);09 bundle.putString(MainActivity.KEY_NAMA, nama);10 11 Intent intent = new Intent(this, DirectionActivity.class);12 intent.putExtras(bundle);13 14 startActivity(intent);15 }
01 06 11 12
001 package id.pratama.tempatmakanjogja;002 003 import java.util.List;
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 21/33
004 005 import org.json.JSONObject;006 007 import com.google.android.gms.common.ConnectionResult;008 import com.google.android.gms.common.GooglePlayServicesUtil;009 import com.google.android.gms.maps.CameraUpdateFactory;010 import com.google.android.gms.maps.GoogleMap;011 import com.google.android.gms.maps.SupportMapFragment;012 import com.google.android.gms.maps.GoogleMap.OnMyLocationChangeListener;013 import com.google.android.gms.maps.model.LatLng;014 import com.google.android.gms.maps.model.MarkerOptions;015 import com.google.android.gms.maps.model.PolylineOptions;016 017 import android.location.Criteria;018 import android.location.Location;019 import android.location.LocationManager;020 import android.os.AsyncTask;021 import android.os.Bundle;022 import android.app.ProgressDialog;023 import android.content.Context;024 import android.graphics.Color;025 import android.support.v4.app.FragmentActivity;026 import android.support.v4.app.FragmentManager;027 import android.view.Menu;028 import android.widget.Toast;029 030 public class DirectionActivity extends FragmentActivity implements
OnMyLocationChangeListener031 {032 private final String URL =
"http://maps.googleapis.com/maps/api/directions/json?";033 private LatLng start;034 private LatLng end;035 private String nama;036 037 private GoogleMap map;038 private JSONHelper json;039 private ProgressDialog pDialog;040 private List listDirections;041 042 @Override043 protected void onCreate(Bundle savedInstanceState)044 {045 super.onCreate(savedInstanceState);046 setContentView(R.layout.activity_direction);047 json = new JSONHelper();048 setupMapIfNeeded();049 050 Bundle b = getIntent().getExtras();
051 if (b != null)052 {053 start = new LatLng(b.getDouble(MainActivity.KEY_LAT_ASAL),
b.getDouble(MainActivity.KEY_LNG_ASAL));054 end = new LatLng(b.getDouble(MainActivity.KEY_LAT_TUJUAN),
b.getDouble(MainActivity.KEY_LNG_TUJUAN));055 nama = b.getString(MainActivity.KEY_NAMA);056 }057 058 new AsyncTaskDirection().execute();059 }060 061 private void setupMapIfNeeded()062 {063 if (map == null)064 {065 FragmentManager fragmentManager = getSupportFragmentManager();066 SupportMapFragment supportMapFragment = (SupportMapFragment)
fragmentManager067 .findFragmentById(R.id.mapsdirections);068 map = supportMapFragment.getMap();069 070 if (map != null)071 {072 setupMap();073 }074 }075 076 }077 078 private void setupMap()079 {080 map.setMyLocationEnabled(true);081 map.setOnMyLocationChangeListener(this);082 moveToMyLocation();083 }084 085 private void moveToMyLocation()086 {087 LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);088 Criteria criteria = new Criteria();089 090 Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,false));
091 if (location != null)092 {
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 22/33
Kemudian saya juga kembali menambahkan beberapa method pada class JSONHelper.java sehingga
akan menjadi seperti ini :
093 map.animateCamera(CameraUpdateFactory.newLatLngZoom(094 new LatLng(location.getLatitude(),
location.getLongitude()), 13));095 }096 }097 098 @Override099 public boolean onCreateOptionsMenu(Menu menu)100 {101 // Inflate the menu; this adds items to the action bar if it is
present.102 getMenuInflater().inflate(R.menu.direction, menu);103 return true;104 }105 106 @Override107 protected void onResume()108 {109 // TODO Auto-generated method stub110 super.onResume();111 int resCode =
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
112 if (resCode != ConnectionResult.SUCCESS)113 {114 GooglePlayServicesUtil.getErrorDialog(resCode, this, 1);115 }116 }117 118 private class AsyncTaskDirection extends AsyncTask119 {120 @Override121 protected Void doInBackground(Void... params)122 {123 String uri = URL124 + "origin=" + start.latitude + "," + start.longitude125 + "&destination=" + end.latitude + "," + end.longitude126 + "&sensor=true&units=metric";127 128 JSONObject jObject = json.getJSONFromURL(uri);129 listDirections = json.getDirection(jObject);130 131 return null;132 }133 134 @Override135 protected void onPreExecute()136 {137 // TODO Auto-generated method stub138 super.onPreExecute();139 pDialog = new ProgressDialog(DirectionActivity.this);140 pDialog.setMessage("Loading....");141 pDialog.setCancelable(true);142 pDialog.show();143 }144 145 @Override146 protected void onPostExecute(Void result)147 {148 // TODO Auto-generated method stub149 super.onPostExecute(result);150 pDialog.dismiss();151 gambarDirection();152 }153 154 }155 156 public void gambarDirection()157 {158 PolylineOptions line = new
PolylineOptions().width(3).color(Color.BLUE);159 for (int i = 0; i < listDirections.size(); i++)160 {161 line.add(listDirections.get(i));162 }163 map.addPolyline(line);164 165 // tambah marker di posisi end166 map.addMarker(new MarkerOptions()167 .position(end)168 .title(nama));169 }170 171 @Override172 public void onMyLocationChange(Location location)173 {174 Toast.makeText(this, "Lokasi berubah ke " + location.getLatitude() +
"," + location.getLongitude(),175 Toast.LENGTH_SHORT).show();176 177 }178 }
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 23/33
001 /*002 * Pratama Nur Wijaya (c) 2013003 *004 * Project : Tempat Makan Jogja005 * Filename : JSONHelper.java006 * Creation Date : Apr 7, 2013 time : 1:47:27 PM007 *008 */009 010 package id.pratama.tempatmakanjogja;011 012 import id.pratama.tempatmakanjogja.entity.TempatMakan;013 import java.io.BufferedReader;014 import java.io.IOException;015 import java.io.InputStream;016 import java.io.InputStreamReader;017 import java.io.UnsupportedEncodingException;018 import java.util.ArrayList;019 import java.util.List;020 021 import org.apache.http.HttpEntity;022 import org.apache.http.HttpResponse;023 import org.apache.http.client.ClientProtocolException;024 import org.apache.http.client.methods.HttpGet;025 import org.apache.http.impl.client.DefaultHttpClient;026 import org.json.JSONArray;027 import org.json.JSONException;028 import org.json.JSONObject;029 import com.google.android.gms.maps.model.LatLng;030 import android.util.Log;031 032 public class JSONHelper033 {034 private InputStream is = null;035 private JSONObject jsonObject = null;036 private String json = "";037 038 private final String TAG_TEMPATMAKAN = "tempatmakan";039 private final String TAG_ID = "id";040 private final String TAG_NAMA = "nama";041 private final String TAG_ALAMAT = "alamat";042 private final String TAG_LAT = "lat";043 private final String TAG_LNG = "lng";044 private final String TAG_ROUTES = "routes";045 private final String TAG_LEGS = "legs";046 private final String TAG_STEPS = "steps";047 private final String TAG_POLYLINE = "polyline";048 private final String TAG_POINTS = "points";049 private final String TAG_START = "start_location";050 private final String TAG_END = "end_location";051 052 public JSONObject getJSONFromURL(String url)053 {054 try055 {056 DefaultHttpClient httpClient = new DefaultHttpClient();057 HttpGet httpGet = new HttpGet(url);058 059 HttpResponse httpResponse = httpClient.execute(httpGet);060 HttpEntity httpEntity = httpResponse.getEntity();061 is = httpEntity.getContent();062 } catch (UnsupportedEncodingException e)063 {064 e.printStackTrace();065 } catch (ClientProtocolException e)066 {067 e.printStackTrace();068 } catch (IOException e)069 {070 e.printStackTrace();071 }072 073 try074 {075 BufferedReader reader = new BufferedReader(new InputStreamReader(076 is, "iso-8859-1"), 8);077 078 StringBuilder sb = new StringBuilder();079 String line = null;080 081 while ((line = reader.readLine()) != null)082 {083 sb.append(line + "\n");084 }085 086 is.close();087 json = sb.toString();088 } catch (Exception e)089 {090 // TODO: handle exception091 }092 093 try094 {095 jsonObject = new JSONObject(json);096 097 } catch (JSONException e)
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 24/33
098 {099 // TODO: handle exception100 }101 102 return jsonObject;103 }104 105 public ArrayList getTempatMakanAll(JSONObject jobj)106 {107 ArrayList listTempatMakan = new ArrayList
();108 109 try110 {111 JSONArray arrayTempatMakan = jobj.getJSONArray(TAG_TEMPATMAKAN);112 113 for (int i = 0; i < arrayTempatMakan.length(); i++)114 {115 JSONObject jobject = arrayTempatMakan.getJSONObject(i);116 117 Log.d("log", "muter ke " + i);118 listTempatMakan.add(new TempatMakan(jobject.getInt(TAG_ID),
jobject.getString(TAG_NAMA), jobject119 .getString(TAG_ALAMAT), jobject120 .getDouble(TAG_LAT), jobject.getDouble(TAG_LNG)));121 122 }123 } catch (JSONException e)124 {125 e.printStackTrace();126 }127 return listTempatMakan;128 }129 130 /*131 * Untuk decode Polyline132 *133 * @params String134 *135 * @return List
136 */137 private List decodePoly(String encoded)138 {139 List poly = new ArrayList();140 int index = 0, len = encoded.length();141 int lat = 0, lng = 0;142 while (index < len)143 {144 int b, shift = 0, result = 0;145 do146 {147 b = encoded.charAt(index++) - 63;148 result |= (b & 0x1f) = 0x20);151 int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));152 lat += dlat;153 shift = 0;154 result = 0;155 do156 {157 b = encoded.charAt(index++) - 63;158 result |= (b & 0x1f) = 0x20);161 int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));162 lng += dlng;163 164 LatLng position = new LatLng((double) lat / 1E5, (double) lng /
1E5);165 poly.add(position);166 }167 return poly;168 169 }170 171 /*172 * Untuk mendapatkan direction173 *174 * @params JSONObject175 *176 * @return List177 */178 public List getDirection(JSONObject jObj)179 {180 181 List directions = new ArrayList();182 183 try184 {185 JSONObject objRoute =
jObj.getJSONArray(TAG_ROUTES).getJSONObject(0);186 JSONObject objLegs =
objRoute.getJSONArray(TAG_LEGS).getJSONObject(0);187 JSONArray arraySteps = objLegs.getJSONArray(TAG_STEPS);188 for (int wi2t = 0; wi2t < arraySteps.length(); wi2t++)189 {
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 25/33
method utama untuk membaca direction adalah method getDirection, pada method ini akan memparsing
data dari google direction yang berupa latitude dan longitude,, kemudian akan digambar kedalam peta yang
kita miliki. Berikut ini tampilan hasil akhir dari aplikasi dalam tutorial ini
Tempat Makan Jogja
Tags: android, api, google, maps, pemrograman, tutorial, versi 2,menampilkan banyak tempat di aplikasi mapandroid,tutorial android map v 2 pratama w ijaya,tutorial membuat aplikasi android dengan google maps dan google directionapi,f ile tempat menyimpan key google api,get direction map v2,menampilkan google maps v2 dan direction android,googlemap api v2 sqlite android,google maps v2 directions android nur w ijaya,contoh program android direction,membuatprogram android map dengan google api,langkah import google play service ke activity,android google maps sqlitev1,tutorial mencari lokasi terdekat google maps v2,membuat map android aplikasi,android tutorial direction,membuatdirection di android 2013,membuat direction android dan marker\,aplikasi google api android,membuat map direction mapsapi v2,menampilkan posisi saat ini di google maps api
148 comments
ALSO ON PRATAMA WIJAYA
Alternati f Mendaftar Akun Google
Play Publisher Tanpa 2 comments
Tutorial Android SQLite Database
24 comments
Tutorial Android Google Direction
API di Maps V2 24 comments
What's this?AROUND THE WEB
These 4 Things Happen Right
Before a Heart Attack Newsmax Health
How to Find Out a Private Number
Phone Call eHow
One Crazy Night: Watch 'This is Not
Happening' Now Comedy Central
Leave a message...
0
190 JSONObject step = arraySteps.getJSONObject(wi2t);191 JSONObject objStart = step.getJSONObject(TAG_START);192 JSONObject objEnd = step.getJSONObject(TAG_END);193 double latStart = objStart.getDouble(TAG_LAT);194 double lngStart = objStart.getDouble(TAG_LNG);195 196 directions.add(new LatLng(latStart, lngStart));197 198 JSONObject poly = step.getJSONObject(TAG_POLYLINE);199 String encodedPoly = poly.getString(TAG_POINTS);200 201 List decodedPoly = decodePoly(encodedPoly);202 for (int eka = 0; eka < decodedPoly.size(); eka++)
203 {204 directions.add(new LatLng(decodedPoly.get(eka).latitude,
decodedPoly.get(eka).longitude));205 }206 207 double latEnd = objEnd.getDouble(TAG_LAT);208 double lngEnd = objEnd.getDouble(TAG_LNG);209 directions.add(new LatLng(latEnd, lngEnd));210 211 }212 } catch (JSONException e)213 {214 // TODO: handle exception215 }216 217 return directions;218 }219 }
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 26/33
Leave a message...
NewestNewest CommunityCommunity ShareShare
Reply
Mar Fian a day ago
mas cara nampilin tempat makannya berdasarkan radius dari lokasi kita ... seperti
2 km .. gimana ya mas ?
!
Reply
Mar Fian a day ago
Mas cara nampilin tempat makannya berdasarkan radius dari lokasi kita ..
misalnya 5 km .. itu gimana ya mas ?
!
Reply
hynra 3 days ago
Mas mau tanya kalo mau nampilin dari my location (current location) ke
destination location yang sudah diketahui lat sama long nya bagaimana mas ?
!
Reply
Pratama Nur W ijaya 3 days agor0 0 t hynra
maksudnya nampilin kayak gimana yah,, ???
!
Reply
hynra 3 days ago Pratama Nur Wijaya
Jadi draw path dari lokasi sekarang (detect by gps) menuju lokasi
yang sudah diketahui latitude sama longitudenya. Sederhananya
saya mau bikin aplikasi pulang rumah mas, jadi nanti dimanapun
saya berada si aplikasinya nampilin direction ke rumah saya. kira2
gmn ya ?
!
Reply
Pratama Nur W ijaya 2 days agor0 0 t hynra
lha ini contohnya kan dari lokasi saya sekarang ke rumah
makan mas..
jadi aplikasi contoh ini dimanapun lokasi kita.. bakal
digambarkan directionnya menuju rumah makan yg dipilih..
:)
!
Reply
reza 6 days ago
mas saya mau tanya peta saya sudah keluar tetapi directionnya tidak bisa
bagaimana ya mas.? dia tidak mau pindah ke activity info tempat maknnya dan
tidak ke directionnya juga. bagaimana ya mas?
!
Reply
Pratama Nur W ijaya 5 days agor0 0 t reza
LOGGGGCAAATTT please.. -___-
!
reza 4 days ago Pratama Nur Wijaya
maaf mas ini logcatnya. mohon bantuannya mas untuk penulisan
ilmiah saya. terima kasih mas.
Share
Share
Share
Share
Share
Share
Share
Share
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 27/33
Reply !
Reply
Pratama Nur W ijaya 4 days agor0 0 t reza
itu bukan logcat error.. nek logcat error itu mesti warnanya
merah..
coba deh perhatikan komen2 dibawah ini.. -______-
!
Reply
reza 2 days ago Pratama Nur Wijaya
nah itu dia mas saya tidak ada error karena saya tidak
running di emulator. saya langsung running di device mas.
peta keluar dan marker keluar. tetapi dia tidak mau
meneruskan ke directionnya. apakah memang harus
running di emulator terlebih dahulu baru bisa running di
device mas? apakah mas membuka tempat konsultasi
dijakarta mas? agar saya bisa datang.
!
Reply
Pratama Nur W ijaya 2 days agor0 0 t reza
saya orang jogja e mas... _^^
ini gak harus running di emulator koq..
malah disarankan langsung ke device..
berarti peta ok.. kan kalo contoh ini... dia akan pindah ke
directionnya ketika infowindowmarkernya di klik..
nah tempat mas sama ndak kayak gitu..?? kalo iya sama..
perhatikan.. di mapnya mesti di set listenernya..
map.setOnInfoWindowClickListener(this);
coba cek..
!
Reply
Pritho 16 days ago
mas mow tanya,pas nginstall adb ny,saya kok gagal truz yaw,,,,,,,,
ini yang saya coba lewat cmd,,,,,,,
truz itu file gms n vending nya sudah saya taruh di platform-tools nya,,,,,,,,
C:\Program Files\Android\sdk\platform-tools>adb install com.android.vending-
108b71f4793186b8fd1768a9cd19bbd5.apk
2483 KB/s (6158861 bytes in 2.421s)
pkg:
/data/local/tmp/com.android.vending108b71f4793186b8fd1768a9cd19bbd5.apk
Failure [INSTALL_FAILED_ALREADY_EXISTS]
mohon bantuan nya
!
Reza Aditya R a month ago
mas boleh bertanya
kan maps v2 itu tampilannya street view
nah apabila menambahkan tombol switch jadi satelite view gmn yah mas?
jadi bisa milih mau street view dan juga satelite view
Share
Share
Share
Share
Share
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 28/33
Reply
jadi bisa milih mau street view dan juga satelite view
terima kasih
!
Reply
Zaldy Putra a month ago
kalo klik info marker langsung forse close... logcat.nya muncul gini.
!
Reply
Pratama Nur W ijaya a month agor0 0 t Zaldy Putra
null pointer..
sudahkah menginject lokasi gps ke device..?
cek juga apakah lat lng device sudah ada..
MainActivity.java baris 169 ada apa..?
!
Reply
Zaldy Putra a month ago
setiap info marker di klik, langsung force close.
muncul eror di logcat sperti ini kenapa yah?
!
Reply
Rany Beginc lipse a month ago
kalau pencarian direction yg ini pakai metode apa ya??
!
Reply
Zaldy Putra a month ago
Pertanyaan sebelumnya batal mas, nah ini ada kasus baru hahahaa...
DDMS.nya Eror wkwkwkw. kalo masukin koordinat cuma geser2 di jalur
katulistiwa aja... hahahaha
kalo itu kira2 gmana mas??
!
Reply
Pratama Nur W ijaya a month agor0 0 t Zaldy Putra
ini ketika running di emulatorkah..?
!
Zaldy Putra a month ago Pratama Nur Wijaya
iya mas, pas di running di emulator.
apa kemungkinan bug dari ddms ADT 22?
oh iya mas, di database.nya itu ada berapa file php mas?
masih bingung niy... ada file_koneksi.php dll?
Share
Share
Share
Share
Share
Share
Share
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 29/33
Reply !
Reply
Zaldy Putra a month ago
mas kalo di logcat selalu muncul failed to find provider itu kenapa?
!
Reply
Zaldy Putra a month ago
mas pratama, mau nanya dong, itu buat databasenya pake SQL yah?
trus masukin php.nya dmana yah? apa di masukin jadi satu folder sebagai file
koneksi?
nb : umpamanya saya online.kan SQL.nya, dibuatin satu subdomain kyak punya
mas. file php saya taruh dmana?
Thanks mas, maaf niy gak ngerti sama sekali ttg web
!
Reply
Pratama Nur W ijaya a month agor0 0 t Zaldy Putra
iya.. file extensi .php bisa satu folder dengan file koneksinya
!
Reply
iwan febi pradana a month ago Pratama Nur Wijaya
file koneksi di mana mas?
!
Reply
Pratama Nur W ijaya a month agor0 0 t iwan febi pradana
dimana.. ??
di satu folder bisa.. atau folder lainnya.. nanti tinggal
menyesuaikan include nya
!
Reply
Zaldy Putra a month ago Pratama Nur Wijaya
Name.nya?
!
Reply
Pratama Nur W ijaya a month agor0 0 t Zaldy Putra
name file..? terserah.. coba aja.. nanti tau sendiri gimana
cara settingnya di hostingnya
!
Reply
iwan febi pradana a month ago Pratama Nur Wijaya
ini SQL biasa apa SQLite mas? saya masih bingung..
trus apa harus databasenya di hostingkan?
!
Reply
Pratama Nur W ijaya a month agor0 0 t iwan febi pradana
gak harus online sih.. tergantung kebutuhan..
disini contohnya saya menggunakan mySQL yang ada di
hosting saya ini.. jadi aplikasi kesannya aplikasi akan lebih
mudah update data..
!
iwan febi pradana a month ago Pratama Nur Wijaya
mas saya sudah hostingkan database saya tapi koq ga bisa
Share
Share
Share
Share
Share
Share
Share
Share
Share
Share
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 30/33
Reply
ya...ini alamatnya http://m.vanilla-shop.com/temp...
dan ini hasilnya :
{"k5889300_tempat":[{"id":"1","nama":"RSI","alamat":"Jl.
A.yani","lat":"-7.245322","lng":"112.735777"},
{"id":"2","nama":"Tunjungan Plaza","alamat":"Jl. Tunjungan,
Kota Surabaya 60261, Indonesia
?","lat":"-7.262691","lng":"112.739933"},
{"id":"3","nama":"Royal Plaza","alamat":"Jl.
A.yani","lat":"-7.317520","lng":"112.733776"},
{"id":"4","nama":"UNESA","alamat":"Jl.
Ketintang","lat":"-7.309517","lng":"112.728111"}]}
!
Reply
Pratama Nur W ijaya a month agor0 0 t iwan febi pradana
gak bisa pye mas..?
!
Reply
iwan febi pradana a month ago Pratama Nur Wijaya
ni logcatnya mas
!
Reply
iwan febi pradana a month ago Pratama Nur Wijaya
eror mas gak bisa d buka mapnya
!
Reply
iwan febi pradana a month ago
mas AVDnya harus menggunakan google api berapa ? kok masih belum bisa
keluar mapnya.
!
Reply
Pratama Nur W ijaya a month agor0 0 t iwan febi pradana
kalo maps masih tidak keluar.. cek logcatnya..
!
Reply
Zaldy Putra a month ago Pratama Nur Wijaya
gak bisa emang gan, AVD gak support OpenGLES 02
hehehehe... harus running di device
!
Reply
Pratama Nur W ijaya a month agor0 0 t Zaldy Putra
bukan gak support... avd itu bisa koq njalanin aplikasi yang
menggunakan OpenGLES 02.. tapi ketika membuat avd
harus di centang 'use host gpu' :)
!
Share
Share
Share
Share
Share
Share
Share
Share
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 31/33
Reply
frans.yunet a month ago
Alow dab...
Aku mau tanya, setelah aku coba tutorial nya...
1. Dibagian MainActivity
myLocation = new LatLng(map.getMyLocation().getLatitude(),
map.getMyLocation().getLongitude());
Ada muncul pesan/tanda "error" --> myLocation cannot resolved to a variable
2. Dibagian : DirectionActivity
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.direction, menu);
return true;
}
Ada muncul pesan/tanda "error" --> directions cannot resolved or is not a field.
(kalo di tutorial line 102.)
!
Reply
Pratama Nur W ijaya a month agor0 0 t frans.yunet
1. Tambahkan object myLocation dari class LatLng (cek post ini, sudah
saya update)
2.Hapus method onCreateOptionsMenu, itu tidak saya gunakan.. hanya
method menu option bawaan dari ADT
!
Reply
ages a month ago
mas cara nambahin waktu dan jarak tempuh gmn??
pencerahan'a donk mas :(
!
Reply
Yunnisa Mut iara a month ago
Mas kalo mau bikin database nya di sqlite expert,bisa ga mas di maps v2?
Klo bisa caranya gimana ya?
Terima kasih
!
Reply
Pratama Nur W ijaya a month agor0 0 t Yunnisa Mutiara
sqlite expert..?
!
Reply
Yunnisa Mut iara a month ago Pratama Nur Wijaya
Jadi spaya lbh praktis,saya pake sqlite expert personal(software
buat bikin database,interface nya kayak access) jdi ntar pake
dbhelper
Tpi ga ngerti ngehubunginnya,
klo bikin databse di eclipse nya langsung kebanyakan,kalo di
php,internet ga dukung
Mohon bantuannya mas
Terima kasih
!
Pratama Nur W ijaya a month agor0 0 t Yunnisa Mutiara
owh.. berarti nanti datanya langsung dari database
sqlitenya..
Share
Share
Share
Share
Share
Share
see more
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 32/33
Reply
yaudah.. tinggal panggil.. mbaknya mesti menguasai dulu
sqlite di android...
nanti tinggal baca latitude dan logitudenya langsung dari db
sqlitenya. . . :)
eh kalo tidak dukung internet.. gimana mau nampilin maps
nya...?? kan harus load maps dari google maps.. dan itu
membutuhkan internet.. :))
!
Reply
Yunnisa Mut iara a month ago Pratama Nur Wijaya
Yah,dukung2 internetnya,tapi terbatas :)
Emg di load langsung ke device ga bisa ya?
!
Reply
Pratama Nur W ijaya a month agor0 0 t Yunnisa Mutiara
mapsnya yang ndak bisa di load tanpa koneksi internet.. :)
!
Reply
Chris t ian Virgo a month ago
kalo tampilangnya gini gimana mas?
!
Reply
Pratama Nur W ijaya a month agor0 0 t Christian Virgo
di artikel ini kan sudah saya jelaskan kenapa tampil seperti itu..
mohon dibaca dengan teliti artikelnya ya mas.. :)
!
iwan febi pradana a month ago
mas ini kenapa ya?
Share
Share
Share
Share
Share
-
7/7/13 Tutorial Membangun Aplikasi Android Menggunakan Google Maps dan Google Direction API | Pratama Wijaya
pratamawijaya.com/programming/tutorial-membangun-aplikasi-android-menggunakan-google-maps-dan-google-direction-api 33/33
Reply !
Share
Tutorial Android SQLite Database
Pratama Wijaya Pratama Wijaya Official Blog GoSimplex WordPress Themes
Bloggers.Com
Contoh Program Android