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();
}
};
我想使用此方法获取位置更新: 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();
}
};