Last Updated on 10 years by Mas Herdi
Sehari yang lalu, Google baru saja merilis update untuk library Play Service yang baru, yaitu Play Service versi 6.5. Play Service yang baru ini mempunyai beberapa fitur baru yang menarik, salah satunya adalah getMapAsync() pada Google Maps Android API v2.
Fitur getMapAsync() ini akan menggantikan method getMap() yang sebelumnya digunakan. Kelebihannya adalah, method getMapAsync() ini mempunyai callbacks yang berjalan secara asynchronous, callback tersebut akan menandakan apakah Google Maps yang diminta sudah tersedia atau belum. Sehingga mudah bagi kita untuk menjalankan method atau fungsi yang hanya bisa dilakukan apabila Google Maps sudah tersedia. Yang mana jika dengan menggunakan method lama getMap(), kita harus melakukan pengecekan manual apakah object map telah tersedia atau belum, seperti ini contoh metode pengambilan object Map lama menggunakan getMap():
GoogleMap map; SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); map = mapFrag.getMap();
Dengan menggunakan getMapAsync, cara inisialisasi object GoogleMap menjadi seperti berikut :
GoogleMap map; MapFragment mapFragment; //.... mapFragment = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)); mapFragment.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; setUpMap(); } });
Bisa dilihat, method getMapAsync mempunyai callbacks method bernama onMapReady(), method itulah yang nantinya akan memberitahu ke aplikasi kita apakah Google Map sudah tersedia atau belum, yang memudahkan kita untuk melakukan aksi-aksi yang cuma bisa dilakukan apabila GoogleMap sudah ready.
Method getMapAsycn() ini juga hanya bisa dijalankan dari kelas MapFragment, berbeda dengan Android Maps sebelumnya yang menggunakan SupportMapFragment. Karena itu, layout pada XML file tentunya juga harus ikut diubah, berikut adalah code layout activity_maps.xml menggunakan MapFragment.
<fragment 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:id="@+id/map" tools:context=".MapsActivity" android:name="com.google.android.gms.maps.MapFragment" />
Bagi yang ingin belajar, inilah kode lengkap pada main Activity yang bernama MapsActivity.java :
import android.support.v4.app.FragmentActivity; import android.os.Bundle; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MapsActivity extends FragmentActivity { private GoogleMap mMap; // Might be null if Google Play services APK is not available. private MapFragment mapFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); setUpMapIfNeeded(); } @Override protected void onResume() { super.onResume(); setUpMapIfNeeded(); } private void setUpMapIfNeeded() { mapFragment = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)); mapFragment.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; setUpMap(); } }); } private void setUpMap() { mMap.setMyLocationEnabled(true); mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); } }
Method getMapAsync() ini hanya tersedia pada Google Play Services library versi 6.5+, sehingga pastikan kalian telah mengupdate dan menggunakan library Play Services terbaru pada project Android kalian. Untuk kode pada AndroidManifest.xml dan file lainnya, isinya masih sama seperti pada tutorial sebelumnya, tentang cara menampilkan Android Maps v2. Kalian juga tetap membutuhkan Maps API key, dan lain sebagainya. Dan walaupun telah menggunakan library Play Services terbaru ini, kalian tetap bisa menggunakan method getMap() yang lama, namun saya sarankan kalian menggunakan method getMapAsync() yang baru tersebut ketika ingin menampilkan Google Maps pada aplikasi Android kalian.
nice info…
just findout why my code not running…
different method…
now i know why..
manstab bro…
You don’t need to use setUpMap() and setUpMapIfNeeded() methods anymore if you are using getMapAsync(). Just get rid of them. All initialization should be go in onMapReady().
yup, you are right
I am just trying to clean up the code
ada masalah disini mas “mMap.setMyLocationEnabled(true);”
Call requires permission which may be rejected by user:
code should explicitly check to see if permission is available (with `checkPermission`)
or handle a potential `SecurityException`
compile nya di android versi apa gan?
kitkat mas, di run bisa sih tapi gak keluar maps nya
marker sama lokasi usernya ada
biasanya masalah di internet atau coba cek key nya sudah benar belum
Mau tanya dong gan, untuk mapsnya normal, tpi kok ga muncul lokasi usernya ya?
Jadi cuma map gitu doang
Tambahin
dulu gan seperti di atas
Udah gan, udh sesuai sama tutor di atas, kira2 kenapa ya? 😐
Location services nya nyala?
Sama perlu tambahin permission untuk access location