Maps-based and location-based services are
compelling for mobile users. Hence let us explore the support for map services
in the Android platform in this tutorial. In the next we will build upon this and add location services
too.
Map services are provided by an external library
that includes the com.google.android.maps package. This library is not provided
as part of the standard SDK. It is provided as a Google APIs add-on to the
android SDK. For the convenience of developers, this add-on is provided as part
of the SDK on the emulator.
Before I jump into the example, let me explain
some fundamental concepts related to the Maps API.
NOTE: For using the Google Maps, you have to
obtain a Maps API key. How to obtain the key is also described towards the end
of this tutorial. This is Step 1.
Maps API add-on provides a MapActivity
class that extends the Activity class of Android. This helps is managing the
lifecycle of a MapView object that we will be using later. Our main class in
the application will be extending the MapActivity class. This class can be
treated as the default activity class whenever we deal with the Maps API.
MapView
– This is a class that extends the View and the ViewGroup classes of Android. It
provides the basic functionality expected on a Map like responding to key
presses or touch and allowing zooming etc. It also provides a controller object
that helps us manipulate the Map view programmatically. We will see how, in the
example later.
Now that we have understood the basics of the Maps
API, let us jump into the example.
Step 2: To begin with, when you create an android
project in Eclipse, instead of choosing the target name as Android 1.5, you
need to select the target as Google APIs. This ensures that the project has the
map API external libraries along with android 1.5 SDK.
Step 3: The Activity class you create this time should
not extend the standard “android.app.Activity” class but should extend the
MapActivity class about which I explained earlier.
Step 4: Apart from this, you need to add the
following tag in the AndroidManifext.xml in order to use the external library:
<uses-library android:name="com.google.android.maps" />
Step 5: Now let us declare the map view in
main.xml in layout folder. To do so, add this element in
order to display the map using MapView.
<com.google.android.maps.MapView
android:id="@+id/myGMap"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:enabled="true"
android:clickable="true"
android:apiKey="0YaGLMeMFKXrhzHL-uSYZSnqXqbGwE6kxF4VwFQ"
/>
Here the apikey should be what was generated by
you in an earlier step 1.
Step 6: In
the activity class I set the geo point on the map and set the satellite view to
false.
myMapView = (MapView) findViewById(R.id.myGMap);
geoPoint = new GeoPoint((int) (latitude * 1000000), (int) (longitude * 1000000));
myMapView.setSatellite(false);
Step 7: Now you are almost ready to go. But we
will try to do some programtic handling of the mapview. For that we need to get
a handle to the MapController object. It is done this way:
myMC = myMapView.getController();
myMC.setCenter(geoPoint);
myMC.setZoom(15);
I also set the zoom controls to be displayed with
this code.
myMapView.setBuiltInZoomControls(true);
myMapView.displayZoomControls(true);
Step 8: Add the following permissions in the
AndroidManifest.xml in order to access the maps over the internet:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
You could execute your program now to view the map
with the fixed geopoint.
Step 9: One last step – let us add some actions to
the key presses for zooming in, zooming out, viewing the satellite view, normal
map view
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_I) {
myMapView.getController().setZoom(myMapView.getZoomLevel() + 1);
return true;
} else if (keyCode ==
KeyEvent.KEYCODE_O) {
myMapView.getController().setZoom(myMapView.getZoomLevel() - 1);
return true;
} else if (keyCode ==
KeyEvent.KEYCODE_S) {
myMapView.setSatellite(true);
return true;
} else if (keyCode ==
KeyEvent.KEYCODE_M) {
myMapView.setSatellite(false);
return true;
}
return false;
}
Now you can run the applications. The Google map
will show up with a pointer to the geo location defined in the program. You can
click on I, O, S and M for zooming in, zooming out, viewing the satellite map
or the normal map respectively.
Interesting?
The complete code is downloadable here.
Obtaining a Maps API Key:
Step 1: Locate debug.keystore on your system. It
is usually in the USER_HOME\Local Settings\Application Data\.android
folder on windows.
Step 2: Use the keytool utility to generate
certificate fingerprint (MD5). keytool utility that comes with the default JDK
installation.
C:\>keytool -list -alias
androiddebugkey -keys
tore .android\debug.keystore -storepass android -keypass android
It will getnerate a certificate fingerprint (MD5)
in this format:
Certificate fingerprint (MD5): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
Step 3: Go to the page
for obtaining the Maps API Key. Put
your Certificate fingerprint (MD5) And get your API key for android Google Map
application. On this page, paste the certificate fingerprint in the appropriate
form field, and click the “Generate API Key” button. This will return a Maps
API key string.
This key needs to be used along with the MapView
element declared in the XML layout file as mentioned in the tutorial above.
Hi Sai,
ReplyDeleteplease do you know how I can find tutorials 12 and 13? I dont see any links to them. When I click more on your main page it takes me to tutorial 15. Cheers mate.
Hi Osagie,
ReplyDeleteYou can see all my blog posts including part 12 and 13 by going to the "Blog Archive" links on the main page itself. or by navigating to older posts at the end of every page.
However, for ease, I will update the tutorial list as well with the links.
Hi Sai Geetha ... That was a great application. But even after I acquired a new key and ran the program without any errors but no map comes up ...Only a grid view appears .. could you please help me out ??
ReplyDeleteHi Deepthi,
ReplyDeleteAre you connected to the internet when you are executing the program? I had this problem when I was offline.
yes I am .. and I am not behind any proxy too ... so no issues with the internet connection . I suspect it could be the signing of the application or key .. I have obtained a new key and inserted into the application too ... Or coul it be any compatibility of the SDK / APIs etc ??
ReplyDeleteIts the problem with the key i guess(make sure that u got the correct key) also make sure that the key is copied in ur xml file where ur map view is declared........
DeleteHi Deepthi,
ReplyDeleteYou are right. It must be mostly to do with the key. It would be worth it to try clearing up the applications deployed on your simulator and redeploying this app and running it.
I will post a small tip on how to clear the apps from the Dalvik VM very soon
Hi Sai,
ReplyDeleteI just wondered if you can give a tutorial on a Restaurant Finder app, that would show Restaurants near the location captured by the GPS and display them on a listing.
It would be much appreciated.
Thanks in advance!
Norman
Hi sai.
ReplyDeleteI'm am designig a similar application and need help. I want my pointer to be on mylocation and I have stated a few geopoints (are these x,y coordinates or lat/long coordinates? Are they different?). How do I create this? I have been having some trouble with this. I read something about itemized array list but I do not understand how to implement this in the code. I only want the overlays to pop up on the map based on the x,y points I hve. The overlays are not clickable and do not display any text when selected. Thanks for tour tome an patience. I greatly appreciate it!
Hello mam,
ReplyDeleteWhen i am trying to run google map on android application which used Google API and android platform 1.5, API level 3. it gets error that
[2009-07-11 11:46:43 - MapView] Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY [2009-07-11 11:46:43 - MapView] Please check logcat output for more details. [2009-07-11 11:46:44 - MapView] Launch canceled!
Can anyone help me to solve this error.
Thanks,
kumar.
Hello Madam..
ReplyDeleteCan u pl explain Locate how to set debug.keystore on my system..?
When running this i can't see the google map... Grid layout only visible..
Hello Madam..
ReplyDeleteCan u pl explain how Locate to debug.keystore on my system..?
When running this i can't see the google map... Grid layout only visible..
Hi ,
ReplyDeleteI am trying to call a video file from a marker position in a google map of android application.
I have implemented code for video fiel and trying to call from marker position . I have done cod e for video and trying with overlays and geo points but not geeting can you please send me the answer
Hi,
ReplyDeleteI want to display a video fiel from a marker posiion in google map.
i have done code for video and trying with overlays i am new to android so dont know exactly
Could please send me the code
Hi Sai Geetha how can I send a mail from emulator by hard coding.when set emulator settings then all mail such as inbox,outbox and all these things are view in emulator.But I want to sign in gmail/yahoo id in emulator user interface and there some space to send a new email from emulator.please help me
ReplyDeleteHi Sai,
ReplyDeleteI just wondered if you can give a tutorial on a Restaurant Finder app, that would show Restaurants near the location captured by the GPS/Network and display them on a listing.
It would be much appreciated.
Thanks in advance!
Mansi
Hi Maidul,
ReplyDeletePlease see if this post http://blog.brightpointuk.co.uk/setting-pop-imap-email-account-android-1x answers your question.
Hello Sai,
ReplyDeleteI am seeing all grids on the view. I am using Google APIs 3 during creation as it reflects on the AndroidManifest. I have a steady internet connection and I ran the application solely and fresh on the Emulator. Can you help me resolve this.
Thanks much.
Hi 'mydailyservings',
ReplyDeletehave you generated your own map key and used that in your application?
hello! I'm rajesh. Your blog is very useful. We're referencing from here for our final year college project :) Thanks so much
ReplyDeleteChandu,
ReplyDeleteHi Sai, i am not able to find my present location in my app, i have generated my own map key, pls healp me regards.
Chandu...
ReplyDeleteHi Sai,
I am not able to find my present location in my app, i have generated my own map key, pls healp me regards.
we have getX(),getY() for current layout co-ordinates and getRawX(),getRawY() for entire scrren. These all are in onTOuchEvent() override method. Just check these things because I am not sure about this..
ReplyDeleteHi sai geeta
ReplyDeleteThis is my first Request to you that iam not getting how to generate key store for the map application. Will you please explain clearly.
Actually Iam facing the problem to find this debug location
USER_HOME\Local Settings\Application Data\.android folder on windows.
Will U please Explain regarding this .
Thank You very much giving this tutorial.
hi ganesh try it here
ReplyDeleteC:\Documents and Settings\Administrator\.android
Hi Geetha,
ReplyDeleteEven i get to see only the grid view on the device. device is also connected to internet. i get only the Zoom in and Zoom out options on tapping the screen. I am thinking is there anything missing in this.
Regards,
Gayathri
Hai nice post, for example you can download from here http://android-codes-examples.blogspot.com/2011/04/google-map-example-in-android-with-info.html
ReplyDeleteHi Geetha,
ReplyDeleteYour Works and examples are very helpful,very good service minded, thanx a lot..
One more thing i want to ask u is are u worked on drive direction in Maps, I don need the code just askin u thats all...
Thank u and continue ur service
hi
ReplyDeleteHi SaiGeetha,
ReplyDeleteI am new to android environment. I am following every blog of yours. it's a very nice tutorial and like spooned. I am getting trouble while inserting an image in a list view along with a text. can you plz brief me abt it?
Thanks,
Krishna.M
Hi SaiGeetha,
ReplyDeleteYour code works perfect. But i need a little bit different. I want to find Latitude and Longitude according to location i.e. in editbox i want to enter a location name and press a button then it will show the Latitude and Longitude of the Location. I use forward geocoding but failure. So will u please help me with the code. It will be great for me.
Best Wishes
Md. Fazla Rabbi(mdfazlarabbi_cse@yahoo.com)
Hi SaiGeetha,
ReplyDeleteMY NAME IS KABLU MANDAL.
I DID YOU BBASIC TUTORIAL GUIDE , ITS GREAT FOR NOVICE ANDROID DEVELOPER.
PLEASE POST SOME TUTORIAL REGARDING iPHONE
Hi Sai Geetha,
ReplyDeleteI'm new to Android and your blog helped me alot! Can you please share your knowledge in using offline maps in Android?
Thanks in Advance
Anu
hi sai
ReplyDeletei try this snippet . it is successfully working
u r doing a great job
million thanks for the help
ReplyDeleteHello Mam ,
ReplyDeleteI'm developing android Application . While Using Google Map i'm getting this error "Failed to find style 'mapViewStyle' in current theme " . I tried in many ways .i cant get the solution. If possible help me.
NOTE:
In that application i can view the map in emulator but not in android device.
thank u very much
ReplyDeletecould u tell me find the distance between two cities or points and also display path
I love your tutorials I just started learning android
ReplyDeleteThank you for giving such valuable tutorial...
ReplyDeletethanks a lot mam for giving needful and best tutorial..it works :)
ReplyDeletefrnds plz tell me how to locate debug.keystore on system
ReplyDeletehttp://annafelix.blogspot.in/2012/05/google-map-api-key-genaration-in-ubuntu.html..checkout this link..it will help you
Deletehttp://annafelix.blogspot.in/2012/05/google-map-api-key-genaration-in-ubuntu.html..check this..it will help you
DeleteHello Mam ,
ReplyDeleteI'm developing android Application . While Using Google Map i'm getting this error "Failed to find style 'mapViewStyle' in current theme " . I tried in many ways .i cant get the solution. If possible help me.
NOTE:
In that application i can view the map in emulator but not in android device.
Hello Mam.....
ReplyDeleteI have seen your app in your blog. Its very useful for me. I implement your code and run the app in my emulator. at that time i get following error message.
Errors are: 1) "java.io.IOException: Server returned: 3", 2) "at android_maps_conflict_avoidance.com.google.googlenav.map.BaseTileRequest.readResponseData(BaseTileRequest.java:115)", 3) "at android_maps_conflict_avoidance.com.google.googlenav.map.MapService$MapTileRequest.readResponseData(MapService.java:1473)", 4) "at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.processDataRequest(DataRequestDispatcher.java:1117)", 5) "at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.serviceRequests(DataRequestDispatcher.java:994)", 6) "at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher$DispatcherServer.run(DataRequestDispatcher.java:1702)".
And only grid is display in emulator.
Please give me solution of it as soon as early.
Email is: sneha2011.jobs@gmail.com
its dn't work sometime ! u need to google how run map on emulator!
Delete