estoy de orientación de Google API 2.3.3 y tienen la siguiente clase de pruebaMockLocation testProvider no llama onLocationChanged
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.util.Log;
public class MockLocationManagerTests extends AndroidTestCase implements LocationListener{
private static final String TAG = "MockLocationTests";
private String locationProvider = "TestProvider";
private LocationManager locationManager;
private Location lastLocation;
protected void setUp() throws Exception {
super.setUp();
locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
if (Settings.Secure.getInt(getContext().getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0) {
fail("Mock location must be enabled");
}
setupLocationManager();
}
private void setupLocationManager() {
if (locationManager.getProvider(locationProvider) != null) {
locationManager.removeTestProvider(locationProvider);
}
locationManager.addTestProvider(locationProvider,
false,
true,
false,
false,
false,
false,
false,
Criteria.POWER_LOW,
Criteria.ACCURACY_FINE);
locationManager.requestLocationUpdates(locationProvider, 0, 0, this);
locationManager.setTestProviderStatus(locationProvider, LocationProvider.AVAILABLE, null, System.currentTimeMillis());
locationManager.setTestProviderEnabled(locationProvider, true);
}
private Location createLocation(double lat, double lon) {
Location location = new Location(locationProvider);
location.setLatitude(lat);
location.setLongitude(lon);
location.setAltitude(0);
location.setTime(System.currentTimeMillis());
return location;
}
protected void tearDown() throws Exception {
super.tearDown();
}
public final void testCanObserveLocationChanging() throws InterruptedException {
Location l = createLocation(19,-2);
locationManager.setTestProviderLocation(locationProvider,l);
synchronized(this){
wait(5000);
}
Location l2 = createLocation(1,-10);
locationManager.setTestProviderLocation(locationProvider,l2);
synchronized(this){
wait(5000);
}
assertEquals(l,lastLocation);
}
public void onLocationChanged(Location location) {
Log.i(TAG,"location changed");
lastLocation = location;
}
public void onProviderDisabled(String provider) {
Log.i(TAG, provider+" disabled");
}
public void onProviderEnabled(String provider) {
Log.i(TAG, provider+" enabled");
}
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.i(TAG,"status changed: "+provider+" to "+status);
}
}
onLocationChanged no está siendo llamado y mi google-fu-fu y el cerebro me está fallando. Cualquier consejo muy apreciada
ACTUALIZACIÓN
ninguno de los mensajes de registro se captura de manera OnStatusChanged y onProviderEnabled no están disparando?
Si llamo getLastKnownLocation()
entre llamadas a la setTestProviderLocation()
locationManager devuelve la ubicación He puesto
otra actualización
Si añado la clase que utiliza este código para mi solicitud luego onLocationChanged() se llamado. La única diferencia es que no estoy usando Mock_Location. Parece que setTestProviderLocation() no está causando que onLocationChanged() se active
¿Está usando el emulador o un teléfono? Yo tampoco veo nada malo. Supongo que ha agregado el permiso ' ' –
Reno
Esto está usando el emulador y sí, ha establecido el permiso Mock location. –