Copy codeThe Code is as follows: package com. yy;
Import java. io. InputStreamReader;
Import java.net. HttpURLConnection;
Import java.net. URL;
Import javax. xml. parsers. SAXParser;
Import javax. xml. parsers. SAXParserFactory;
Import org. xml. sax. Attributes;
Import org. xml. sax. InputSource;
Import org. xml. sax. SAXException;
Import org. xml. sax. XMLReader;
Import org. xml. sax. helpers. DefaultHandler;
Import android. content. Context;
Import android. location. Location;
Import android. location. LocationManager;
Public class GetCity {
/**
* Use Google MAP to obtain the current city of the user through the current latitude and longitude
*/
Static final String GOOGLE_MAPS_API_KEY = "abcdefg ";
Private LocationManager locationManager;
Private Location currentLocation;
Private String city = "nationwide ";
Public GetCity (Context context ){
This. locationManager = (LocationManager) context
. GetSystemService (Context. LOCATION_SERVICE );
// It's just a simple way to get the city without real-time updates. So please comment out
// This. locationManager. requestLocationUpdates (
// LocationManager. GPS_PROVIDER, 1000, 0,
// New LocationListener (){
// Public void onLocationChanged (Location loc ){
//// This function is triggered when the coordinates change. If the Provider transmits the same coordinates, it will not be triggered.
/// Save the latest location
// CurrentLocation = loc;
/// Update the latitude & longpolling TextViews
// System. out
//. Println ("getCity ()"
// + (Loc. getLatitude () + "" + loc
//. Getlongpolling ()));
//}
//
// Public void onProviderDisabled (String arg0 ){
// System. out. println (". onProviderDisabled (disabled)" + arg0 );
//}
//
// Public void onProviderEnabled (String arg0 ){
// System. out. println (". onProviderEnabled (Enabled)" + arg0 );
//}
//
// Public void onStatusChanged (String arg0, int arg1,
// Bundle arg2 ){
// System. out. println (". onStatusChanged (the Provider's transition is available," +
// "This function is triggered when three statuses are temporarily unavailable and no service are directly switched)" +
// Arg0 + "" + arg1 + "" + arg2 );
//}
//});
CurrentLocation = locationManager. getLastKnownLocation (LocationManager. GPS_PROVIDER );
If (currentLocation = null)
CurrentLocation = locationManager
. GetLastKnownLocation (LocationManager. NETWORK_PROVIDER );
}
/**
* Start Parsing
*/
Public void start (){
If (currentLocation! = Null ){
New Thread (){
Public void run (){
String temp = reverseGeocode (currentLocation );
If (temp! = Null & temp. length ()> = 2)
City = temp;
}
}. Start ();
} Else {
System. out. println ("GetCity. start () does not get location ");
}
}
/**
* Obtain the city
* @ Return
*/
Public String getCity (){
Return city;
}
/**
* Use the Google map api to parse cities
* @ Param loc
* @ Return
*/
Public String reverseGeocode (Location loc ){
// Http://maps.google.com/maps/geo? Q = 40.714224,-73.961452 & output = json & oe = utf8 & sensor = true_or_false & key = your_api_key
String localityName = "";
HttpURLConnection connection = null;
URL serverAddress = null;
Try {
// Build the URL using the latitude & longpolling you want to lookup
// NOTE: I chose XML return format here but you can choose something
// Else
ServerAddress = new URL ("http://maps.google.com/maps/geo? Q ="
+ Double. toString (loc. getLatitude () + ","
+ Double. toString (loc. getlongpolling ())
+ "& Output = xml & oe = utf8 & sensor = true & key ="
+ GOOGLE_MAPS_API_KEY );
// Set up out communications stuff
Connection = null;
// Set up the initial connection
Connection = (HttpURLConnection) serverAddress. openConnection ();
Connection. setRequestMethod ("GET ");
Connection. setDoOutput (true );
Connection. setReadTimeout (10000 );
Connection. connect ();
Try {
InputStreamReader isr = new InputStreamReader (connection
. GetInputStream ());
InputSource source = new InputSource (isr );
SAXParserFactory factory = SAXParserFactory. newInstance ();
SAXParser parser = factory. newSAXParser ();
XMLReader xr = parser. getXMLReader ();
GoogleReverseGeocodeXmlHandler handler = new GoogleReverseGeocodeXmlHandler ();
Xr. setContentHandler (handler );
Xr. parse (source );
LocalityName = handler. getLocalityName ();
System. out. println ("GetCity. reverseGeocode ()" + localityName );
} Catch (Exception ex ){
Ex. printStackTrace ();
}
} Catch (Exception ex ){
Ex. printStackTrace ();
System. out. println ("GetCity. reverseGeocode ()" + ex );
}
Return localityName;
}
/**
* The final piece of this puzzle is parsing the xml tha