Hello Android Guys...hope you doing great!!
We know already how to get Google map in our Android App see my earlier tutorial post
Google Map Tutorial Android (Basic)
Note: Because we need to Get Google map API key to Get map in our app
I have wrote step by step simple tutorial see and put in you main.xml file see below
Okay so today we are going to add some more new things to our Google Maps
1. Enter location name and Go to particular location
2. Bookmark location (POI) place of interest on map
3. Get the location name/coordinates where you touched on map
4. Zoom-in and Zoom-out map location
Let's start coding stuff..create an Android app with
-------------------------------------------
App Name: GoogleMapAdvance
Package Name: com.rdc
Android SDK: Android SDK 2.3.3 / Google API 10
Default MapActivity Name: ActivityGoogleMap
-------------------------------------------
package com.rdc.gmap; import java.io.IOException; import java.util.List; import java.util.Locale; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Point; import android.location.Address; import android.location.Geocoder; import android.net.Uri; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; public class ActivityGoogleMap extends MapActivity implements OnClickListener { private MapView mapView = null; private Button btnGo = null; private EditText editLocation = null; private MapController mController = null; private GeoPoint gPoint = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // to add zoom in and zoom out default buttons mapView = (MapView) findViewById(R.id.mapView); mapView.setBuiltInZoomControls(true); btnGo = (Button) findViewById(R.id.buttonGo); btnGo.setOnClickListener(this); editLocation = (EditText) findViewById(R.id.editText1); // load bangalore as default location browseLocation(); // ---Add a location marker--- MapOverlay mapOverlay = new MapOverlay(); List<Overlay> listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); mapView.invalidate(); } @Override public void onClick(View v) { if (btnGo == v) { String location = editLocation.getText().toString(); if (location.equalsIgnoreCase("")) { Toast.makeText(getBaseContext(),"Please Enter location!!", Toast.LENGTH_SHORT).show(); } else { String map_location = "geo:0,0?q=" + location; Uri geoUri = Uri.parse(map_location); Intent mapCall = new Intent(Intent.ACTION_VIEW, geoUri); startActivity(mapCall); // clear old location string location = null; } } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } // to load particular location on g-map public void browseLocation() { mController = mapView.getController(); String coordinates[] = { "12.917233", "77.620811" }; double lat = Double.parseDouble(coordinates[0]); double lng = Double.parseDouble(coordinates[1]); gPoint = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); mController.animateTo(gPoint); mController.setZoom(17); } // create inner class to add marker at any place on g-map class MapOverlay extends com.google.android.maps.Overlay { // add bookmark on map @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); // ---translate the GeoPoint to screen pixels--- Point screenPts = new Point(); mapView.getProjection().toPixels(gPoint, screenPts); // ---add the marker--- Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.red_pushpin2); canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 50, null); return true; } // get the location where you touched on map @Override public boolean onTouchEvent(MotionEvent event, MapView mapView) { // ---when user lifts his finger--- if (event.getAction() == 1) { GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault()); try { List<Address> addresses = geoCoder.getFromLocation( p.getLatitudeE6()/ 1E6, p.getLongitudeE6()/ 1E6, 1); String add = ""; if (addresses.size() > 0) { for (int i = 0; i < addresses.get(0) .getMaxAddressLineIndex(); i++) add += addresses.get(0).getAddressLine(i) + "\n"; } Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } return true; } else return false; } } }main.xml
Note: make sure you must have Google Map API key to put in Map View in main.xml file
(This is the mistake often made by newbie)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:weightSum="1" android:layout_height="fill_parent" android:layout_width="fill_parent"> <LinearLayout android:gravity="center" android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout1" android:layout_weight="0.02" android:weightSum="1"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:layout_weight=".10" android:id="@+id/buttonGo" android:text=" Go "></Button> <EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:lines="1" android:singleLine="true" android:layout_width="wrap_content" android:layout_marginRight="2dp" android:layout_weight=".90"></EditText> </LinearLayout> <LinearLayout android:id="@+id/laymap" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="wrap_content" android:layout_weight="0.98"> <com.google.android.maps.MapView android:id="@+id/mapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="0iuCzAK4N1AoTya_fr62sB7NXXPqkWqF-OCNMEg" /> </LinearLayout> <!-- you need to replace your Google map API key here see apiKey="" --> </LinearLayout>
and Manifest file is
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.rdc.gmap" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" /> <activity android:name=".ActivityGoogleMap" android:theme="@android:style/Theme.NoTitleBar" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Default Output screen will load as Bangalore and Mark it
if you touch any place on map it shows details like this
when you enter any location and click Go...it loads new location...
You can download the complete source code zip file here : GoogleMapAdvance
cheers!!
I'd love to hear your thoughts!