我想使用以下方法获取位置更新:
FusedLocationProviderClient#requestLocationUpdates(LocationRequest locationRequest,LocationCallback locationCallback,Looper looper)

而且在Stackoverflow中实现此方法的大多数答案都必须覆盖LocationCallback方法。可以找到一个最近的例子in this question

该问题的代码段如下:

mLocationCallback = new LocationCallback() {

    @Override
    public void onLocationResult(LocationResult locationResult) {
        synchronized (SilentCurrentLocationProvider.this) {
            super.onLocationResult(locationResult);
            Location location = locationResult.getLastLocation();
    }
};


但是,当我尝试像这样初始化LocationCallback时。我没有被Android Studio强制覆盖上述方法。当我检查LocationCallback类的源代码时,我发现它是普通的Java类,并且有onLocationResult方法,但是不能重写。
android - com.google.android.gms.location.LocationCallback是接口(interface)还是类?-LMLPHP

最佳答案

只有在abstract实现的情况下,编译器才会强制您覆盖。您看到的LocationCallBack类不包含任何抽象成员。注意他们的{ }。这意味着它已经定义了“具体”实现。还要注意的一点是,它们没有被制成final,这意味着它们可以被覆盖或完全不被覆盖,这解释了为什么编译器没有强迫您。

您实际上是在创建一个匿名类,然后选择要覆盖的一个。在您的情况下,您选择了onLocationResult()方法。

mLocationCallback = new LocationCallback() { //Creating anonymous class to provide our own implementation for onLocationResult

@Override
public void onLocationResult(LocationResult locationResult) {
    synchronized (SilentCurrentLocationProvider.this) {
        super.onLocationResult(locationResult);
        Location location = locationResult.getLastLocation();
  }
};

08-25 10:03