This article aims to give knowledge about how to implements newer Google Maps into your applications. If you have already worked with V1, implementing V2 is very easy.
Here are the few implementation for this article.
1) Plot multiple pin on Google map
2) Zoom level to show all the markers within screen
3) Click event on marker associated object item.
4) Customize info window on Google map,Please visit.
Before starting implementation Google map with your application, you need follow few step to create api key for map. follow this link to set up your Google play service and map api key.
Here are the few implementation for this article.
1) Plot multiple pin on Google map
2) Zoom level to show all the markers within screen
3) Click event on marker associated object item.
4) Customize info window on Google map,Please visit.
Before starting implementation Google map with your application, you need follow few step to create api key for map. follow this link to set up your Google play service and map api key.
Step 1 : Create activity_main.xml
<LinearLayout 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:orientation="vertical" >
<RelativeLayout
android:id="@+id/rlMapLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.2"
android:orientation="vertical" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</LinearLayout>
Step 2 : Create class as LatLngBean
public class LatLngBean
{
private String Title="";
private String Snippet="";
private String Latitude="";
private String Longitude="";
public String getTitle() {
return Title;
}
public void setTitle(String
title) {
Title = title;
}
public String getSnippet()
{
return Snippet;
}
public void setSnippet(String
snippet) {
Snippet = snippet;
}
public String getLatitude()
{
return Latitude;
}
public void setLatitude(String
latitude) {
Latitude = latitude;
}
public String
getLongitude() {
return Longitude;
}
public void setLongitude(String
longitude) {
Longitude = longitude;
}
}
Step 3 : Create class as MainActivity
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Dialog;
import android.os.Bundle;
import
android.support.v4.app.FragmentActivity;
import
android.view.ViewTreeObserver;
import
android.view.ViewTreeObserver.OnGlobalLayoutListener;
import
android.widget.RelativeLayout;
import
android.widget.Toast;
import
com.google.android.gms.common.ConnectionResult;
import
com.google.android.gms.common.GooglePlayServicesUtil;
import
com.google.android.gms.maps.CameraUpdateFactory;
import
com.google.android.gms.maps.GoogleMap;
import
com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import
com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import
com.google.android.gms.maps.model.LatLng;
import
com.google.android.gms.maps.model.LatLngBounds;
import
com.google.android.gms.maps.model.LatLngBounds.Builder;
import
com.google.android.gms.maps.model.Marker;
import
com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends FragmentActivity {
private GoogleMap googleMap;
private
ArrayList<LatLng>listLatLng;
private RelativeLayout rlMapLayout;
HashMap<Marker,LatLngBean>
hashMapMarker = new
HashMap<Marker,LatLngBean>();
@Override
protected void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rlMapLayout=(RelativeLayout)
findViewById(R.id.rlMapLayout);
setUpMapIfNeeded();
setData();
}
private void setData()
{
ArrayList<LatLngBean>
arrayList=new ArrayList<LatLngBean>();
LatLngBean
bean=new LatLngBean();
bean.setTitle("Ahmedabad");
bean.setSnippet("Hello,Ahmedabad");
bean.setLatitude("23.0300");
bean.setLongitude("72.5800");
arrayList.add(bean);
LatLngBean
bean1=new LatLngBean();
bean1.setTitle("Surat");
bean1.setSnippet("Hello,Surat");
bean1.setLatitude("21.1700");
bean1.setLongitude("72.8300");
arrayList.add(bean1);
LatLngBean
bean2=new LatLngBean();
bean2.setTitle("Vadodara");
bean2.setSnippet("Hello,Vadodara");
bean2.setLatitude("22.3000");
bean2.setLongitude("73.2000");
arrayList.add(bean2);
LoadingGoogleMap(arrayList);
}
/**
* @author Hasmukh Bhadani
* Set googleMap if require
*/
private void setUpMapIfNeeded()
{
int status =
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
// Google Play
Services are not available
if(status!=ConnectionResult.SUCCESS)
{
int requestCode = 10;
Dialog
dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();
}
else
{
if (googleMap == null)
{
googleMap =
((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
if (googleMap != null)
{
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
}
}
}
}
/**
* @author Hasmukh Bhadani
* Loading Data to the GoogleMap
*/
//
-------------------------Google Map
void
LoadingGoogleMap(ArrayList<LatLngBean> arrayList)
{
if (googleMap != null)
{
googleMap.clear();
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
if(arrayList.size()>0)
{
try
{
listLatLng=new
ArrayList<LatLng>();
for (int i = 0; i <
arrayList.size(); i++)
{
LatLngBean
bean=arrayList.get(i);
if(bean.getLatitude().length()>0
&& bean.getLongitude().length()>0)
{
double lat=Double.parseDouble(bean.getLatitude());
double lon=Double.parseDouble(bean.getLongitude());
Marker
marker = googleMap.addMarker(new MarkerOptions()
.position(new LatLng(lat,lon))
.title(bean.getTitle())
.snippet(bean.getSnippet())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
//Add Marker to Hashmap
hashMapMarker.put(marker,bean);
//Set Zoom Level of
Map pin
LatLng
object=new LatLng(lat, lon);
listLatLng.add(object);
}
}
SetZoomlevel(listLatLng);
}
catch (NumberFormatException
e)
{
e.printStackTrace();
}
googleMap.setOnInfoWindowClickListener(new
OnInfoWindowClickListener() {
@Override
public void
onInfoWindowClick(Marker position)
{
LatLngBean
bean=hashMapMarker.get(position);
Toast.makeText(getApplicationContext(),
bean.getTitle(),Toast.LENGTH_SHORT).show();
}
});
}
}
else
{
Toast.makeText(getApplicationContext(),"Sorry! unable
to create maps", Toast.LENGTH_SHORT).show();
}
}
/**
* @author Hasmukh Bhadani
* Set Zoom level all pin withing screen on
GoogleMap
*/
public void SetZoomlevel(ArrayList<LatLng>
listLatLng)
{
if (listLatLng != null &&
listLatLng.size() == 1)
{
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(listLatLng.get(0),
10));
}
else if (listLatLng != null &&
listLatLng.size() > 1)
{
final Builder builder =
LatLngBounds.builder();
for (int i = 0; i <
listLatLng.size(); i++)
{
builder.include(listLatLng.get(i));
}
final ViewTreeObserver
treeObserver = rlMapLayout.getViewTreeObserver();
treeObserver.addOnGlobalLayoutListener(new
OnGlobalLayoutListener()
{
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout()
{
if(googleMap != null){
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(),
findViewById(R.id.map)
.getWidth(),
findViewById(R.id.map).getHeight(), 80));
rlMapLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
}
}
}
Step 4 : Modify AndroidManifest.xml
- you need to modify your AndroidManifest.xml for set few permission for Google map,
<?xml version="1.0"
encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hb.mapv2"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<!--
MAP PERMISSION -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission android:name="android.permission.INTERNET"
/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"
/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
<permission
android:name="<YOUR PCAKAGENAME>.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="<YOUR PCAKAGENAME>.permission.MAPS_RECEIVE"
/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<!-- MAP meta-data -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="<YOUR API KEY HERE...>" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"
/>
</application>
</manifest>
I will be happy if you will provide your feedback or follow this blog. Any suggestion and help will be appreciated.
Thank you :)
345353
ReplyDeleteniceee
ReplyDeleteReally very helpful and nice code
ReplyDeleteHow to add multiple marker on Map using JSON data
ReplyDeleteHow to add multiple marker on Map using JSON data
ReplyDeleteHi... I got an error "cannot resolve a method getMap()".
ReplyDeletesame problem.....
Deletehave you any solution for that...??
for me also same problem
DeleteCould i get download link for above example ?
ReplyDeletei have an eroor in getmap() method why this error occur
ReplyDeletereplace with getMapSync(this)
Deletecannot resolve method again
DeleteThis comment has been removed by the author.
ReplyDeleteHow to add multiple marker on Map using JSON data?
ReplyDeletegetting message as sorry unable to load map
ReplyDeletehave you used the api key?
Deleteplease help me out thanks in advance
ReplyDeletehey,you didn't use api key in your manifest or whats happening?
ReplyDeletecan i got ur sourcecode?
ReplyDeleteThanks and I have a nifty proposal: What Renovation Expenses Are Tax Deductible home renovation victoria
ReplyDelete