LocationClient getLastLocation () devolver null
Soy nuevo en la programación de Android y quería empezar creando una aplicación muy básica que muestra la latitud y la longitud de la ubicación actual en la pantalla.
Estoy desarrollando para mi Samsung Galaxy S3 y leído que usted necesita kickstart el teléfono para devolver el GPS .
- ¿Cómo puedo obtener el nombre de la ciudad de mi posición actual?
- Obtener el nombre de ubicación actual del usuario sin necesidad de utilizar gps o Internet, sino mediante Network_Provider en android
- Cómo obtener la ubicación GPS de Android
- RequestLocationUpdates no se actualiza en intervalos en Android
- Google maps containsLocation en android
He intentado hacer esto en el método onConnected()
con la llamada de método requestLocationUpdates()
en el LocationManager. Sin embargo, encuentro que el LocationClient todavía está devolviendo una localización null
.
¿Puede alguien decirme lo que estoy haciendo mal?
Aquí está mi MainActivity:
import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.Menu; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.location.LocationClient; public class MainActivity extends FragmentActivity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { private LocationClient mLocationClient; private Location mCurrentLocation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLocationClient = new LocationClient(this, this, this); } @Override protected void onStart() { super.onStart(); mLocationClient.connect(); } @Override protected void onStop() { mLocationClient.disconnect(); super.onStop(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onConnectionFailed(ConnectionResult arg0) { // TODO Auto-generated method stub } @Override public void onConnected(Bundle arg0) { Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); LocationManager manager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); manager.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) { } }); mCurrentLocation = mLocationClient.getLastLocation(); TextView latTextView = (TextView) findViewById(R.id.latitude_text); latTextView.setText(Double.toString(mCurrentLocation.getLatitude())); TextView longTextView = (TextView) findViewById(R.id.longitude_text); longTextView.setText(Double.toString(mCurrentLocation.getLongitude())); } @Override public void onDisconnected() { Toast.makeText(this, "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } }
Mi manifiesto para Android tiene este aspecto:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.willigetwet.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Al funcionar el depurador encuentro que mCurrentLocation es null después de la llamada a mLocationClient.getLastLocation()
.
Estaría muy agradecido por cualquier ayuda!
- Cómo obtener Ciudad y País de un usuario en android sin GPS?
- ¿Cómo obtener la ubicación actual de este código de mapa? También intento recibir datos del vehículo del servidor cuando estoy abierto el mapa
- Error invocar método virtual 'doble android.location.Location.getLatitude ()' en una referencia de objeto nulo
- ¿Cómo encontrar mi ubicación actual (latitute + longitude) al hacer clic en un botón en android?
- LocationRequest desplazamiento más pequeño y precisión
- conexión a internet en pausa después de bloqueo de teléfono android
- ¿Cuál es el significado de android.location.LocationManager.PASSIVE_PROVIDER?
- Android locationManager sigue llamando onLocationChanged después de removeUpdates
mLocationClient.getLastLocation();
Puede devolver null si no tiene ninguna última ubicación guardada por el dispositivo. Si usted lee su documentación , dice;
It returns the best most recent location currently available. If a location is not available, which should happen very rarely, null will be returned
También dentro del método onLocationChanged
es posible que desee establecer la ubicación en la ubicación más reciente, cuando cambie su ubicación.
@Override public void onLocationChanged(final Location location) { mCurrentLocation = location; }