2011-01-20 17 views
8

estoy Tring para utilizar el GPS en el emulador de Android, he el siguiente código:Android - No se puede obtener la ubicación GPS en el emulador

public class NL extends Activity { 

private LocationManager locmgr = null; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nl); 

     locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     Criteria crit = new Criteria(); 
     crit.setAccuracy(Criteria.ACCURACY_FINE); 
     String provider = locmgr.getBestProvider(crit, true); 
     Location loc = locmgr.getLastKnownLocation(provider); 


     Toast msg = Toast.makeText(this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
     msg.show(); 
    } 
} 

He añadido la siguiente línea en el manifiesta:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

y me he fijado la ubicación GPS con el método DDMS y, o bien con el método de solución geo, pero cuando ejecuto el código, me sale un NullPointerExeption en la línea de pan tostado, probablemente causaría loc es nulo .

No entiendo dónde está el error ... ¿me pueden ayudar, por favor?


¡ACTUALIZACIÓN!

Gracias por su ayuda, ahora uso el siguiente código y no obtengo ningún error, pero no ejecuta el código dentro deChangeLocation ... no ejecuta el Toast y no devuelve ningún mensaje en el registro!

public class NL extends Activity { 

     private LocationManager locmgr = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.nl); 

      locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // Define a listener that responds to location updates 
      LocationListener locationListener = new LocationListener() { 
       public void onLocationChanged(Location loc) { 
        // Called when a new location is found by the network location provider. 
        Log.i("NOTIFICATION","onLocationChenged Triggered"); 

        Toast msg = Toast.makeText(NetworkLocator.this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
        msg.show(); 
       } 

       public void onStatusChanged(String provider, int status, Bundle extras) {} 

       public void onProviderEnabled(String provider) {} 

       public void onProviderDisabled(String provider) {} 
       }; 

      // Register the listener with the Location Manager to receive location updates 
      locmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     } 
    } 

¡Gracias!

+2

tenía que comprobar si en realidad * * locmgr.getBestProvider devuelve "GPS"? de todos modos, definitivamente debe implementar un * LocationListener * y pasarlo a LocationManager con * requestLocationUpdates() * –

+0

getBestProvider devolver "gps". ¿Tengo que agregar un locador de ubicación incluso si trato de obtener la ubicación con lastKnownLocation? gracias por su ayuda –

+0

@Marco Faion Por favor, mantenga sus respuestas actualizadas ... ¡Ya le respondí una vez y no dio ningún comentario sobre la respuesta! > 'http: // stackoverflow.com/questions/4591765/android-sqlite-database-method-undefined-fot-type/4591843 # 4591843' – Beasly

Respuesta

7

encontrado la solución:

LocationManager.NETWORK_PROVIDER es erróneo.

corrección: LocationManager.GPS_PROVIDER

+1

En mi experiencia, el emulador no parece responder a los cambios de ubicación enviados a través de DDMS cuando el proveedor está configurado como NETWORK_PROVIDER, pero cuando está configurado para GPS_PROVIDER como has notado. Esto se ve como imitación en el emulador para mí, o al menos un comportamiento que no es obvio. – Mick

1

si todo lo que lo que se describe está hecho de tal vez usted no está probablemente no ur GPS está activado en la configuración emulator.go a: -> Ubicación y seguridad: -> y el uso de los satélites GPS se debe comprobar


editado: ithink tienes que usar el administrador de ubicación sin el tipo de criterios.



LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

loc=mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

------ de tratar de hacer larga. y lat.

+0

el "uso de gps satelites" está marcado –

0

¿Estás seguro de que tu dispositivo emulado es compatible con el GPS? Creo que había una opción adicional para este ...

Esto puede ayudar también:

Gracias! Para todos: puede cambiar el objetivo de compilación para su proyecto en cualquier momento en Eclipse: haga clic con el botón derecho en el proyecto en Package Explorer, seleccione Propiedades> Android y luego seleccione 'Google API' para Project Target. - Los desarrolladores que trabajan con configuraciones de cultura no inglesa podrían notar que presionar el botón Enviar en Controles de ubicación no envía una nueva ubicación al emulador de Android. Se corrigió con la próxima versión 7 de las herramientas SDK; para una solución rápida puede cambiar su configuración regional a 'en'. (Ver code.google.com/p/android/issues/detail?id=915 para más detalles.) - Patrick de Kleijn

fuente: GPS on emulator doesn't get the geo fix - Android

8

emulador simplemente no tiene ningún lugar en el comenzando. De acuerdo con el doc, el método 'getLastKnownLocation' puede devolver null, por lo que está bien. En ese caso, debe esperar las actualizaciones de ubicación (puede utilizar el método requestLocationUpdates de LocationManager).Puede desencadenar actualización de la ubicación en el módulo GPS del emulador por comando siguiente:

adb -e emu geo fix 50 50 
Cuestiones relacionadas