Android getlastknownlocation siempre nulo en el emulador

Parece un problema común, pero realmente no puedo entender por qué está sucediendo a pesar de que leí un montón de problemas similares.

Estoy jugando con una clase de ubicación básica en un dispositivo emulador, configuré todo – permisos (FINE y COARSE), establecí las coordenadas en el DDMS. También traté de usar el telnet y luego, pero no importa lo que se bloquee con el puntero nulo. excepción en la línea con getlastknownlocation, alguna idea, ¿qué está mal aquí?

public class MainActivity extends Activity implements LocationListener { private static LocationManager ok; private Location L; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ok=(LocationManager)this.getSystemService(ok.GPS_PROVIDER); L=ok.getLastKnownLocation(ok.GPS_PROVIDER); } @Override public void onLocationChanged(Location Loc) { try { double latop=Loc.getLatitude(); double longe=Loc.getLongitude(); Log.i("OK", "and"+longe+""+latop); } catch (NullPointerException e) { } } 

getLastKnownLocation() devolverá null en general, si ninguna aplicación ha solicitado una corrección de ubicación de su proveedor deseado recientemente.

En el emulador, parece ir un paso más allá: no obtiene una ubicación a menos que se haya entregado una al emulador desde que su aplicación ha llamado a requestLocationUpdates() .

El patrón general para usar getLastKnownLocation() , si desea probabilidades decentes de obtener una Location real, es usar requestLocationUpdates() y removeLocationUpdates() para asegurarse de que LocationManager esté buscando ubicaciones activamente a través de su proveedor elegido. Por supuesto, también puede usar LocationListener y onLocationChanged() , en lugar de getLastKnownLocation() , si así lo elige.

Hay otra opción, crear su propio proveedor utilizando locationManager.addTestProvider (); para que puedas hacer tus propias pruebas.