Android LocationServices.FusedLocationApi obsoleto

Yo no podía entender por qué LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest, this); «FusedLocationApi» es la cruz y punto en el que lo dice está en desuso.
Haga clic aquí para ver la Imagen

import android.location.Location;
import android.location.LocationListener;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MaintainerMapActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{

private GoogleMap mMap;
GoogleApiClient mGoogleApiClient;
Location mLastLocaton;
LocationRequest mLocationRequest;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maintainer_map2);
    //Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}


@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    //Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

@Override
public void onLocationChanged(Location location) {

}

@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 onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(1000);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest, this);
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}
}
  • Cómo si ya no se utiliza no es la línea sobre esto, por favor marque estoy utilizando este LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest, this);
  • FusedLocationApi se tache
  • revise sus dependencias puedo compilar el uso de esta compilación ‘com.google.android.gms:play-servicios-ubicación:9.4.0’
  • Usted está usando esto en oncreate metod mGoogleApiClient = new GoogleApiClient.Generador(este) .addApi(LocationServices.API) .addConnectionCallbacks(este) .addOnConnectionFailedListener(este) .build();
  • Yo estaba usando compilar ‘com.google.android.gms:play-servicios-ubicación:11.4.0’ y después me cambio a 9.4.0 se solucionó el problema, ¿por qué lo hizo revisión después de cambiar el número?
  • [Comprobar la ubicación del servicio de uso de la última versión ](developers.google.com/android/reference/com/google/android/gms/…)
  • Tengo que comprobarlo por favor, consulte también mi respuesta primera buildGoogleApiClient de lo contrario, su darán excepción de puntero nulo.
  • developers.google.com/android/reference/com/google/android/gms/… usted puede verificar esto en las versiones más recientes

InformationsquelleAutor vvvv | 2017-09-29

8 Kommentare

  1. 142

    Respuesta Original

    Esto sucede, es porque FusedLocationProviderApi en desuso en una reciente versión de google play services. Usted puede comprobar aquí. La guía oficial ahora sugiere el uso de FusedLocationProviderClient. Usted puede encontrar la guía detallada aquí.

    para el correo.g en el interior de onCreate() crear un FusedLocationProviderClient instancia

     mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    y de la solicitud de la última ubicación conocida, todo lo que tienes que hacer es llamar a

    mFusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                //Got last known location. In some rare situations, this can be null.
                if (location != null) {
                    //Logic to handle location object
                }
            }
        });

    Simple ¿no?


    Actualización Importante (24 De Octubre De 2017):

    Ayer Google ha actualizado su desarrollador oficial página con una advertencia que dice

    Por favor, continúe usando el FusedLocationProviderApi clase y no migrar a la FusedLocationProviderClient clase hasta que Google Play services versión 12.0.0 está disponible, que se espera que esté disponible a principios de 2018. El uso de la FusedLocationProviderClient antes de la versión 12.0.0 hace que el cliente de la aplicación se bloquee al Google Play services se actualiza el dispositivo. Nos disculpamos por cualquier inconveniente que esto pueda haber causado.

    Android LocationServices.FusedLocationApi obsoleto
    Así que creo que deberíamos seguir utilizando el obsoleto LocationServices.FusedLocationApi hasta que Google se resuelve el problema.


    Última Actualización (21 De Noviembre De 2017):

    La advertencia se ha ido ahora. Google Play servicios de 11.6 6 de noviembre de 2017, la nota de la versión dice : Android LocationServices.FusedLocationApi obsoleto yo creo que el Juego de los Servicios no se cuelgue cuando se actualiza a sí mismo en el fondo. Por lo que podemos utilizar las nuevas FusedLocationProviderClient ahora.

    • En caso de no marcar esta como una respuesta ? porque estoy bastante seguro de que muchos se enfrentan a este problema en un futuro cercano y su pregunta y esta respuesta puede ayudar a encontrar la solución correcta.
    • Me encanta la forma en que Google docs todavía decirle que use la antigua API: developer.android.com/training/location/…
    • es getLastLocation() haciendo lo LocationServices.FusedLocationApi.requestLocationUpdates () ¿? ¿Qué tiene de extraño que, hasta ahora, es la documentación que apunta todavía a la manera antigua. Es confuso. developer.android.com/training/location/…
    • Estoy de acuerdo. Que necesitan para trabajar en el mantenimiento adecuado de arriba-a-fecha de ejemplos. btw getLastLocation() devolver sólo el más reciente ubicación conocida del dispositivo.. usted puede solicitar la actualización de la ubicación con la nueva requestLocationUpdates(LocationRequest request, PendingIntent callbackIntent) método.
    • gracias. sí, ese es el método que he estado usando. Yo estoy pegado a 11.2.0 en el ínterin.
    • Mira como la advertencia se ha ido ahora (13 de noviembre de 2017), supongo que eso significa que es bueno ir con FusedLocationProviderClient ?
    • Mi mal! esto ha sido reportado para escuchar 11.6.0: developers.google.com/android/guides/releases
    • Sí,la advertencia se ha ido.. y el link que proporciona también a los estados que la nueva versión de google play services no se cuelgue si el usuario las actualizaciones de la aplicación. Creo que debo actualizar mi respuesta ahora.
    • De verdad ? Donde es la advertencia que muestra ? He intentado buscar una advertencia en cada página web & fusionados método del cliente y se encontró ninguna advertencia.
    • Estoy hablando de FusedLocationApi, se muestra una advertencia. El OP preguntó esta API está ahora en desuso y su editada respuesta mostró la advertencia se ha ido. Así que usted está seguro de que estaban hablando también de FusedLocationApi?
    • Sí, fue mostrando advertencia al principio, cuando el OP de la pregunta y después de algunos días Google retira la advertencia, y poner una nota diciendo que todo el mundo debería utilizar el obsoleto FusedLocationApi. Ahora todo está bien en desuso. FusedLocationApi también está mostrando advertencia. Se cree que está recibiendo confundido.
    • Usted dijo-La advertencia se ha ido ahora (Última Actualización (21 de noviembre de 2017). De donde se ha ido – Docs o Android Studio? No se puede decir acerca Docs pero en Android Studio es todavía te muestre la advertencia.
    • Había una advertencia oficial docs.. ver Oct, 24 de actualización.
    • Eso significa que usted estaba hablando acerca de los documentos de advertencia. No la advertencia que se muestra por Android Studio. Incluso hoy en día, COMO muestra la advertencia de no usar FusedLocationApi.
    • sí. Estás confundirse con la respuesta de las actualizaciones.
    • Y qué sencillo? Su ejemplo no tiene requestLocationUpdates, lo que es difícil con mFusedLocationClient.getLastLocation()? mejor dar ejemplo con requestLocationUpdates
    • La pregunta era sobre la depreciación. Él nunca le preguntó acerca de una completa API demo aquí.
    • Señor, por favor elaborar la diferencia entre ambos, ¿por qué este nuevo Fusionado ubicación del cliente del proveedor difieren de acuerdo con la anterior y qué problema resuelve por uno nuevo.
    • Para que usted puede estudiar el código fuente de ambas clases’ y averiguar cuáles son los cambios entre ambos implantación.

  2. 10
       //Better to use GoogleApiClient to show device location. I am using this way in my aap.
    
        public class SuccessFragment extends Fragment{
            private TextView txtLatitude, txtLongitude, txtAddress;
            //private AddressResultReceiver mResultReceiver;
            //removed here because cause wrong code when implemented and
            //its not necessary like the author says
    
            //Define fields for Google API Client
            private FusedLocationProviderClient mFusedLocationClient;
            private Location lastLocation;
            private LocationRequest locationRequest;
            private LocationCallback mLocationCallback;
    
            private static final int REQUEST_PERMISSIONS_REQUEST_CODE = 14;
    
            @Nullable
            @Override
            public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
                View view = inflater.inflate(R.layout.fragment_location, container, false);
    
                txtLatitude = (TextView) view.findViewById(R.id.txtLatitude);
                txtLongitude = (TextView) view.findViewById(R.id.txtLongitude);
                txtAddress = (TextView) view.findViewById(R.id.txtAddress);
    
                //mResultReceiver = new AddressResultReceiver(null);
                //cemented as above explained
                try {
                    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());
                    mFusedLocationClient.getLastLocation()
                            .addOnSuccessListener(getActivity(), new OnSuccessListener<Location>() {
                                @Override
                                public void onSuccess(Location location) {
                                    //Got last known location. In some rare situations this can be null.
                                    if (location != null) {
                                        //Logic to handle location object
                                        txtLatitude.setText(String.valueOf(location.getLatitude()));
                                        txtLongitude.setText(String.valueOf(location.getLongitude()));
                                        if (mResultReceiver != null)
                                            txtAddress.setText(mResultReceiver.getAddress());
                                    }
                                }
                            });
                    locationRequest = LocationRequest.create();
                    locationRequest.setInterval(5000);
                    locationRequest.setFastestInterval(1000);
                    if (txtAddress.getText().toString().equals(""))
                        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                    else
                        locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    
                    mLocationCallback = new LocationCallback() {
                        @Override
                        public void onLocationResult(LocationResult locationResult) {
                            for (Location location : locationResult.getLocations()) {
                                //Update UI with location data
                                txtLatitude.setText(String.valueOf(location.getLatitude()));
                                txtLongitude.setText(String.valueOf(location.getLongitude()));
                            }
                        }
    
                        ;
                    };
                } catch (SecurityException ex) {
                    ex.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return view;
            }
    
            @Override
            public void onStart() {
                super.onStart();
    
                if (!checkPermissions()) {
                    startLocationUpdates();
                    requestPermissions();
                } else {
                    getLastLocation();
                    startLocationUpdates();
                }
            }
    
            @Override
            public void onPause() {
                stopLocationUpdates();
                super.onPause();
            }
    
            /**
             * Return the current state of the permissions needed.
             */
            private boolean checkPermissions() {
                int permissionState = ActivityCompat.checkSelfPermission(getActivity(),
                        Manifest.permission.ACCESS_COARSE_LOCATION);
                return permissionState == PackageManager.PERMISSION_GRANTED;
            }
    
            private void startLocationPermissionRequest() {
                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                        REQUEST_PERMISSIONS_REQUEST_CODE);
            }
    
    
            private void requestPermissions() {
                boolean shouldProvideRationale =
                        ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                                Manifest.permission.ACCESS_COARSE_LOCATION);
    
                //Provide an additional rationale to the user. This would happen if the user denied the
                //request previously, but didn't check the "Don't ask again" checkbox.
                if (shouldProvideRationale) {
                    Log.i(TAG, "Displaying permission rationale to provide additional context.");
    
                    showSnackbar(R.string.permission_rationale, android.R.string.ok,
                            new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    //Request permission
                                    startLocationPermissionRequest();
                                }
                            });
    
                } else {
                    Log.i(TAG, "Requesting permission");
                    //Request permission. It's possible this can be auto answered if device policy
                    //sets the permission in a given state or the user denied the permission
                    //previously and checked "Never ask again".
                    startLocationPermissionRequest();
                }
            }
    
            /**
             * Callback received when a permissions request has been completed.
             */
            @Override
            public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                                   @NonNull int[] grantResults) {
                Log.i(TAG, "onRequestPermissionResult");
                if (requestCode == REQUEST_PERMISSIONS_REQUEST_CODE) {
                    if (grantResults.length <= 0) {
                        //If user interaction was interrupted, the permission request is cancelled and you
                        //receive empty arrays.
                        Log.i(TAG, "User interaction was cancelled.");
                    } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        //Permission granted.
                        getLastLocation();
                    } else {
                        //Permission denied.
    
                        //Notify the user via a SnackBar that they have rejected a core permission for the
                        //app, which makes the Activity useless. In a real app, core permissions would
                        //typically be best requested during a welcome-screen flow.
    
                        //Additionally, it is important to remember that a permission might have been
                        //rejected without asking the user for permission (device policy or "Never ask
                        //again" prompts). Therefore, a user interface affordance is typically implemented
                        //when permissions are denied. Otherwise, your app could appear unresponsive to
                        //touches or interactions which have required permissions.
                        showSnackbar(R.string.permission_denied_explanation, R.string.settings,
                                new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {
                                        //Build intent that displays the App settings screen.
                                        Intent intent = new Intent();
                                        intent.setAction(
                                                Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                        Uri uri = Uri.fromParts("package",
                                                BuildConfig.APPLICATION_ID, null);
                                        intent.setData(uri);
                                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                        startActivity(intent);
                                    }
                                });
                    }
                }
            }
    
    
            /**
             * Provides a simple way of getting a device's location and is well suited for
             * applications that do not require a fine-grained location and that do not need location
             * updates. Gets the best and most recent location currently available, which may be null
             * in rare cases when a location is not available.
             * <p>
             * Note: this method should be called after location permission has been granted.
             */
            @SuppressWarnings("MissingPermission")
            private void getLastLocation() {
                mFusedLocationClient.getLastLocation()
                        .addOnCompleteListener(getActivity(), new OnCompleteListener<Location>() {
                            @Override
                            public void onComplete(@NonNull Task<Location> task) {
                                if (task.isSuccessful() && task.getResult() != null) {
                                    lastLocation = task.getResult();
    
                                    txtLatitude.setText(String.valueOf(lastLocation.getLatitude()));
                                    txtLongitude.setText(String.valueOf(lastLocation.getLongitude()));
    
                                } else {
                                    Log.w(TAG, "getLastLocation:exception", task.getException());
                                    showSnackbar(getString(R.string.no_location_detected));
                                }
                            }
                        });
            }
    
            private void stopLocationUpdates() {
                mFusedLocationClient.removeLocationUpdates(mLocationCallback);
            }
    
            private void startLocationUpdates() {
                if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    //TODO: Consider calling
                    //   ActivityCompat#requestPermissions
                    //here to request the missing permissions, and then overriding
                    //  public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                         int[] grantResults)
                    //to handle the case where the user grants the permission. See the documentation
                    //for ActivityCompat#requestPermissions for more details.
                    return;
                }
                mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, null);
            }
    
            //private void showSnackbar(final String text) {
            //   if (canvasLayout != null) {
            //       Snackbar.make(canvasLayout, text, Snackbar.LENGTH_LONG).show();
            //   }
            //}
            //this also cause wrong code and as I see it dont is necessary
            //because the same method which is really used
    
    
            private void showSnackbar(final int mainTextStringId, final int actionStringId,
                                      View.OnClickListener listener) {
                Snackbar.make(getActivity().findViewById(android.R.id.content),
                        getString(mainTextStringId),
                        Snackbar.LENGTH_INDEFINITE)
                        .setAction(getString(actionStringId), listener).show();
            }
        }

    Y nuestro fragment_location.xml

           <?xml version="1.0" encoding="utf-8"?>
           <LinearLayout 
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/locationLayout"
                android:layout_below="@+id/txtAddress"
                android:layout_width="match_parent"
                android:layout_height="@dimen/activity_margin_30dp"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/txtLatitude"
                    android:layout_width="@dimen/activity_margin_0dp"
                    android:layout_height="@dimen/activity_margin_30dp"
                    android:layout_weight="0.5"
                    android:gravity="center"
                    android:hint="@string/latitude"
                    android:textAllCaps="false"
                    android:textColorHint="@color/colorPrimaryDark"
                    android:textColor="@color/colorPrimaryDark" />
    
                <TextView
                    android:id="@+id/txtLongitude"
                    android:layout_width="@dimen/activity_margin_0dp"
                    android:layout_height="@dimen/activity_margin_30dp"
                    android:layout_weight="0.5"
                    android:gravity="center"
                    android:hint="@string/longitude"
                    android:textAllCaps="false"
                    android:textColorHint="@color/colorPrimary"
                    android:textColor="@color/colorPrimary" />
            </LinearLayout>
    • No se puede resolver el símbolo AddressResultReceiver
    • quitar esta línea. Y el resto del código de trabajo para usted
    • no se puede obtener la ubicación en el próximo intervalo de
    • me estoy poniendo de ubicación en tiempo real en cada caso en que usted necesita para comprobar la ubicación de permiso en el manifiesto como en el interior de código
    • Gracias por el código. Pero tengo un problema, Si necesito ubicación después de cada 100 metros y enviarlo al servidor ¿qué debo hacer? Por favor, ayudar.
    • Uso como esta : locationRequest =LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setInterval(90000) .setSmallestDisplacement(10) .setFastestInterval(10000);

  3. 2

    Sí, es obsoleto!

    Aquí hay algunos puntos que usted necesita, mientras que el uso de las nuevas FusedLocationProviderClient.

    1. de importación como de importación com.google.android.gms.location.FusedLocationProviderClient; 😅
    2. Me doy cuenta de que va a implementar la LocationListener de la interfaz. En el mFusedLocationClient.requestLocationUpdates() método, que ahora no tomar una LocationListener como un parámetro. Usted puede proporcionar LocationCallback. Como esta es una clase abstracta no se puede implementar como LocationListener. Hacer un método de devolución de llamada y pasarla en lugar de ‘este’, como se mencionó en el Google guía. importar como import com.google.android.gms.location.LocationCallback;
    3. Con LocationCallback, tendrás onLocationResult() en lugar de onLocationChanged(). Devuelve LocationResult objeto en lugar de la Ubicación del objeto. Uso LocationResult.getLastLocation() para obtener la ubicación más reciente disponible en este objeto de resultado. Importar como import com.google.android.gms.location.LocationResult;
  4. 1

    Sí, se ha quedado obsoleta. FusedLocationProviderClient es más fácil que FusedLocationProviderApi, porque FusedLocationProviderApigeneralmente requiere GoogleApiClient también, que necesitamos para conectarse a Google Play Service manualmente. Si ha utilizado previamente GoogleApiClient, ahora GoogleApiClientya no es necesario (más aquí).

    Para obtener la última ubicación, puede utilizar esta función:

    import com.google.android.gms.location.FusedLocationProviderClient;
    import com.google.android.gms.tasks.OnCompleteListener;
    
    public class MainActivity extends AppCompatActivity{
    //before public class MainActivity extends AppCompatActivity implements LocationListener,...,...
    
    
    private static final String TAG = "MainActivity";
    public static final int MY_PERMISSIONS_REQUEST_FINE_LOCATION = 101;
    private FusedLocationProviderClient mFusedLocationClient;
    private Location mGetedLocation;
    
    private double currentLat, currentLng;
    
    private void getLastLocation() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE_LOCATION);
            }
            return;
        }
        mFusedLocationClient.getLastLocation()
                .addOnCompleteListener(this, new OnCompleteListener<Location>() {
                    @Override
                    public void onComplete(@NonNull Task<Location> task) {
                        if (task.isSuccessful() && task.getResult() != null) {
                            mGetedLocation = task.getResult();
                            currentLat = mGetedLocation.getLatitude();
                            currentLng = mGetedLocation.getLongitude();
                            //updateUI();
                        }else{
                            Log.e(TAG, "no location detected");
                            Log.w(TAG, "getLastLocation:exception", task.getException());
                        }
                    }
                });
    
    }
  5. -2

    problema es con tu declaración de importación

    quitar este

    import android.location.LocationListener;

    agregar

    import com.google.android.gms.location.LocationListener;
  6. -2

    Por favor realizar su Actividad de implementar LocationListener de los Servicios de Google , no de sistema operativo Android, esto funcionó para mí.

  7. -2

    uso getFusedLocationProviderClient lugar LocationServices.FusedLocationApi.

    Kotlin

    activity?.let { activity ->
          val client = LocationServices.getFusedLocationProviderClient(activity)
               client.lastLocation.addOnCompleteListener(activity, OnCompleteListener<Location> {
                  //it.result.latitude
                  //it.result.longitude
          })
    }

    java

    FusedLocationProviderClient client =
            LocationServices.getFusedLocationProviderClient(this);
    
    //Get the last known location
    client.getLastLocation()
            .addOnCompleteListener(this, new OnCompleteListener<Location>() {
                @Override
                public void onComplete(@NonNull Task<Location> task) {
                    //...
                }
            });

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea