3

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

Stackoverflow 中实现此方法的大多数答案都必须覆盖 LocationCallback 方法。最近的一个例子可以在这个问题中找到

该问题的代码片段如下:

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 Studio 中 LocationCallback 类的源代码截图

4

1 回答 1

4

编译器唯一一次强制您覆盖是在abstract实现的情况下。您看到的LocationCallBack类不包含任何抽象成员。注意他们是如何拥有的{ }。这意味着它已经定义了“具体”实现。还有一点需要注意的是它们不是 made 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();
  }
};
于 2019-09-16T08:39:24.697 回答