com.google.android.gms.location.LocationCallback 是接口还是 Class?

Is com.google.android.gms.location.LocationCallback an Interface or Class?

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

Whosebug 中实现此方法的大部分答案都必须重写 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 class 的源代码时,我发现它是正常的 java class 并且 onLocationResult 方法在那里,但不会覆盖。

编译器唯一一次强制您重写是在 abstract 实现的情况下。您看到的 LocationCallBack class 不包含任何抽象成员。请注意他们的 { }。这意味着它已经定义了 'concrete' 实现。还有一点需要注意的是,它们不是made final,这意味着它们可以被覆盖,也可以根本不被覆盖,这就解释了为什么编译器不强制你。

您实际上是在创建一个匿名 class,然后选择要覆盖的一个。在您的情况下,您选择了 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();
  }
};