I do not need to display a map. However, I need to use the gps/3g network to locate my current positions ADDRESS (not long and lat) this will then be added to a automated sms response to inform a person that I currently cant reply, & the include the string address of my current location. I have the sms stuff working, just need to figure out a method of accessing the gps and pulling an address. I have seen sample code for lat/long. Perhaps I need to convert lat/long into an address within the google maps API? I am unsure howto go about it. Any advice/code snippets/similar tutorials welcome! Thanks. :)
3 Answers
There are two steps to this:
Get the current location - latitude & longitude, using the GPS, network, last-known location etc. The Android location documentation includes sample code.
Use the Android Geocoder class to request a lookup to convert the lat/long to an Address (from which you can easily extract city, country, street, etc). Specifically, you need to use the getFromLocation() method
Note:
- The getFromLocation() method returns a SET of matches. In some scenarios you can show the user a set (say 5) and let them choose the best one, or you can just use the first one, assuming it's best.
- Remember that both these calls can take time. The GPS/network may take a while to provide a location. Likewise the call to getFromLocation() may take time, as it goes over the network to the Google Maps API. Therefore it is critical that you use extensive error handling for the various scenarios AND that both these calls are moved onto a separate thread so you don't lock up the app user interface (look into AsyncTask)
- The Geocoder class backend is only present on Google-approved devices. So the lookup will basically fail on any device that doesn't have GMail/Market/Maps on it.

- 28,313
- 34
- 134
- 217
-
Thanks. :) Do you know of any tutorials that would make it easier? I'm finding it a little hard to follow. :-\ – GrumP Feb 17 '11 at 18:48
-
1Unfortunately, it is quite complicated. I'd suggest you first write code to get the location, then to do the geocode, and then after that start using asynctask if you want better performance. The code in the link above is the best place to start as it fully explains everything. It's just a matter of spending time reading, coding, re-reading, debugging, until you understand it. – Ollie C Feb 17 '11 at 18:55
-
Ollie, can get the lat/long working now. Will work on trying to convert it to an actual address next. Thanks Again. :) – GrumP Feb 17 '11 at 21:51
-
Ollie, have this working finally. But as you mentioned there are performance issues. With the activities running alongside GPS and internet, the GUI of the app becomes laggy. How difficult is it to handle the reverse geocoding in a seperate thread to prevent lockups? – GrumP Feb 22 '11 at 15:13
-
1Read up on AsyncTask, it makes it pretty easy. Easiest way is to create an inner class inside your activity (subclass AsyncTask) and move your code in there. doInBackground() is where you put the name lookup call, onPostExecute() is where you update your UI. http://developer.android.com/reference/android/os/AsyncTask.html – Ollie C Feb 22 '11 at 16:10
-
Would it be possible to pull some data from maps.google.com? I don't know if I need to make another question. I want to pull that link from there site somehow & store it as a string. http://i.imgur.com/2rInK.jpg – GrumP Feb 24 '11 at 16:20
The answer is here: http://developer.android.com/reference/android/location/Geocoder.html
You need to create Geocoder object and call getFromLocation(double latitude, double longitude, int maxResults)
Geocoder gCoder = new Geocoder(myContext);
ArrayList<Address> addresses = gCoder.getFromLocation(123456789, 123456789, 1);
if (addresses != null && addresses.size() > 0) {
Toast.makeText(myContext, "country: " + addresses.get(0).getCountryName(), Toast.LENGTH_LONG).show();
}

- 57,492
- 25
- 134
- 150
-
Thanks, find it all a tad confusing but will have a good read and see if I get anywhere :) – GrumP Feb 17 '11 at 18:49
-
Really struggling with this. I can get the lat and long and print it to the screen. I want to print the address instead. Can anyone show me howto create the geocoder object and howto impliment the getFromLocation method? Read the provided link, but totally lost atm. – GrumP Feb 21 '11 at 00:14
-
Thanks Warren. Really thanks for your help. :) I'm not sure what should be where "myContext" is. "Length cannot be resolved or is not a field" is an error too. My lat and long have been added to a string called my coords, which is retrieved from another class with a get method. This complicates it further. – GrumP Feb 21 '11 at 12:46
-
1If you use this inside an activity, you can use "this" as the context, because the activity inherits from the context. Otherwise try to find a corresponding context somewhere. The length was a mistake and is only supported by pure arrays. should be `size()`. – WarrenFaith Feb 21 '11 at 18:37
As you know for getting location address you can use google GeoCoder
beside that for get location addresses by providing latitude and longitude you can use this API.this is reliable and more faster than google Geocoder.Here i attach the link and small example...
API url -
you can concatenate latitude and longitude value next to equal sign at the url.
example -
lat = 6.123456
lng = 79.123456
String url =
"https://maps.googleapis.com/maps/api/geocode/json?latlng=lat+","+lng";
this will return a nice jsonObject and you can play with it, just try this.Currently im using this API for my location services and its more faster than normal google geoCoder API.To catch the json response you can use volley or anything.Happy coding.

- 3,064
- 28
- 22