La clase Android LocationClient está en desuso, pero se usa en la documentación

Si revisamos la documentación del LocationClient , podemos ver que la clase está obsoleta.

Pero la clase obsoleta se usa en la documentación para obtener la ubicación actual .

Creo que esto es un poco engañoso o estoy mirando documentaciones incorrectas?

De nuevo, Google ha lanzado una nueva API pero no han actualizado la documentación: $ Después de pasar algún tiempo tratando de descubrir cómo funciona, lo obtuve, aquí tiene un ejemplo completo usando la nueva / última API de servicio de ubicación … Disfrute desarrollando 🙂

 import android.location.Location; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { private final String TAG = "MyAwesomeApp"; private TextView mLocationView; private GoogleApiClient mGoogleApiClient; private LocationRequest mLocationRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationView = new TextView(this); setContentView(mLocationView); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); } @Override protected void onStart() { super.onStart(); // Connect the client. mGoogleApiClient.connect(); } @Override protected void onStop() { // Disconnecting the client invalidates it. mGoogleApiClient.disconnect(); super.onStop(); } @Override public void onConnected(Bundle bundle) { mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(1000); // Update location every second LocationServices.FusedLocationApi.requestLocationUpdates( mGoogleApiClient, mLocationRequest, this); } @Override public void onConnectionSuspended(int i) { Log.i(TAG, "GoogleApiClient connection has been suspend"); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.i(TAG, "GoogleApiClient connection has failed"); } @Override public void onLocationChanged(Location location) { mLocationView.setText("Location received: " + location.toString()); } } 

y no olvide agregar estos permisos a su archivo AndroidManifest.xml:

  

Nota: si solo necesita obtener la última ubicación (sin actualizaciones), puede usar LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient) desde OnConnected

Parte de la documentación es antigua en Google (algunos ejemplos que usted mencionó aún usan el Cliente en desuso). Debe utilizar el nuevo GoogleApiClient como se describe en la ubicación Ejemplos de servicios:

 private GoogleApiClient mGoogleApiClient; mGoogleApiClient = new GoogleApiClient.Builder(context) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build() 

y cuando el nuevo cliente está conectado, puede usar la API de ubicación fusionada, por ejemplo, así:

 LocationServices.FusedLocationApi.requestLocationUpdates(theNewClient, locationRequest, locationListener); 

Parece que esto fue cubierto en el blog de desarrolladores . Para LocationClient, usarías esto junto con LocationServices que luego nos llevará a GeofencingApi .

LocationClient se elimina. GoogleApiClient es api para usar en las API de ubicación de servicios de Google Play.

El código de muestra para los escenarios comunes está aquí y las clases de capacitación se actualizaron con más en breve.

De acuerdo con el código de actualización de la documentación ..

 package iwannado.com.myapplicationforsha1key; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Geocoder; import android.location.Location; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.identity.intents.Address; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import java.io.IOException; import java.util.List; public class MapWithMapViewActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { private static final String TAG = MapWithMapViewActivity.class.getCanonicalName(); private GoogleMap mMap = null; private MapView mMapView = null; private EditText loatcationEditText = null; private GoogleApiClient mGoogleApiClient = null; private Location mLocationRequest = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map_with_map_view); loatcationEditText = (EditText) findViewById(R.id.loatcation_edit_text); mMapView = (MapView) findViewById(R.id.mapView); /* * The method is used to create mapView * */ mMapView.onCreate(savedInstanceState); /* *The method Return Google map * */ mMapView.getMapAsync(this); gotoCurrentLoactionGooglePlayService(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override public void onLowMemory() { super.onLowMemory(); mMapView.onLowMemory(); } @Override protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } @Override protected void onStop() { super.onStop(); mGoogleApiClient.disconnect(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; } private void gotoCurrentLoactionGooglePlayService() { /*working with new google api for laction.. http://stackoverflow.com/a/25173057 * */ mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); } @Override public void onConnected(@Nullable Bundle bundle) { /* * Follow this documentation.. https://developer.android.com/training/location/retrieve-current.html * * Please add Runtime permission here for android 6 * */ mLocationRequest = LocationServices.FusedLocationApi.getLastLocation( mGoogleApiClient); if (mLocationRequest != null) { LatLng latLng = new LatLng(mLocationRequest.getLatitude(),mLocationRequest.getLongitude()); mMap.addMarker(new MarkerOptions().position(latLng).title("Programmatically Current Loaction")); mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); Toast.makeText(this,"getLatitude() = "+String.valueOf(mLocationRequest.getLatitude())+"\n getLongitude() = "+String.valueOf(mLocationRequest.getLongitude()),Toast.LENGTH_LONG).show(); } } @Override public void onConnectionSuspended(int i) { Log.i(TAG, "GoogleApiClient connection has been suspend"); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Log.i(TAG, "GoogleApiClient connection has failed"); } @Override public void onLocationChanged(Location location) { Toast.makeText(this,"Location received: " + location.toString(),Toast.LENGTH_LONG).show(); } }