我想使用以下方法获取位置更新:
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方法,但是不能重写。
最佳答案
只有在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();
}
};