Android uses Skyhook to determine your location. In short, it uses a combination of GPS (great outdoors but slow to acquire a lock, and not good indoors), Cell Tower location (fast, works everywhere, but inaccurate), and WiFi (fast, accurate to 50m or so, but only works near the location of WiFi...