Ich konnte nicht herausfinden, warum LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest, this);
"FusedLocationApi" durchgestrichen ist und darauf hinweisen, dass es veraltet ist.
Klicken Sie hier, um das Bild anzuzeigen
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) {
}
}
Antworten:
Ursprüngliche Antwort
Dies geschieht, weil es
FusedLocationProviderApi
in einer neueren Version der Google Play-Dienste veraltet ist. Sie können es hier überprüfen . Der offizielle Leitfaden schlägt jetzt die Verwendung von FusedLocationProviderClient vor . Die ausführliche Anleitung finden Sie hier .zum Beispiel innerhalb
onCreate()
oderonViewCreated()
erstellen Sie eineFusedLocationProviderClient
InstanzKotlin
und um den letzten bekannten Ort anzufordern, müssen Sie nur anrufen
Java
und
Einfach, nicht wahr?
Wichtiges Update (24. Oktober 2017):
Gestern hat Google seine offizielle Entwicklerseite mit einer Warnung aktualisiert , die besagt
Daher denke ich, wir sollten das Veraltete weiterhin verwenden,
LocationServices.FusedLocationApi
bis Google das Problem behoben hat.Letztes Update (21. November 2017):
Die Warnung ist jetzt weg. In den Versionshinweisen zu Google Play Services 11.6 vom 6. November 2017 heißt es: Ich denke, Play Services stürzen nicht ab, wenn sie sich selbst im Hintergrund aktualisieren. So können wir
FusedLocationProviderClient
jetzt neu verwenden.quelle
getLastLocation()
nur der letzte bekannte Standort des Geräts zurückgegeben. Sie können eine Standortaktualisierung mit einer neuenrequestLocationUpdates(LocationRequest request, PendingIntent callbackIntent)
Methode anfordern .Und unsere fragment_location.xml
quelle
Verwenden Sie diese Methode
Im Detail beziehen Sie sich auf diese Antwort
quelle
Ja, es ist veraltet!
Hier sind einige Punkte, die Sie benötigen, wenn Sie den neuen FusedLocationProviderClient verwenden .
com.google.android.gms.location.FusedLocationProviderClient;
😅import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationResult;
quelle
Ja, es ist veraltet.
FusedLocationProviderClient
ist einfacher alsFusedLocationProviderApi
, weilFusedLocationProviderApi
normalerweise auch benötigtGoogleApiClient
, mit denen wir unsGoogle Play Service
manuell verbinden müssen. Wenn Sie zuvor verwendet habenGoogleApiClient
, wird es jetztGoogleApiClient
nicht mehr benötigt ( mehr hier ).Verwenden Sie diese Funktion, um den letzten Standort zu ermitteln:
quelle
Problem ist mit Ihrer Importanweisung
entferne das
hinzufügen
quelle
Bitte lassen Sie Ihre Aktivität LocationListener von Google Services implementieren, nicht von Android OS. Dies hat bei mir funktioniert.
quelle
Verwenden Sie stattdessen getFusedLocationProviderClient LocationServices.FusedLocationApi.
Kotlin
Java
quelle