Regardless of what provider you use GPS, NETWORK or best, all work on the same principle of getting the location from a local (on the device) cache.
If you want GPS instantly you need to hack the system to update the cache and then read it. On Samsung phones this hack is needed. On HTC and other models you dont need this hack. I (fortunately) have found the way to trigger that cache update with a hack.
Just call the following code before your getLastKnownLocation.
<YourActivity>.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(final Location location) {
}
});
OR
Use LocationClient. The new API's (just in) for location updates. These API's dont need you to find the best provider instead do all this shit underneath.