LocationListener LocationCallback 有啥区别?

Posted

技术标签:

【中文标题】LocationListener LocationCallback 有啥区别?【英文标题】:What is the difference LocationListener LocationCallback?LocationListener LocationCallback 有什么区别? 【发布时间】:2016-12-03 08:30:01 【问题描述】:

我一直在看和玩FusedLocationProviderApi。该类包含这两个方法:

PendingResult<Status> requestLocationUpdates(GoogleApiClient client, LocationRequest request, LocationCallback callback, Looper looper)

PendingResult<Status> requestLocationUpdates(GoogleApiClient client, LocationRequest request, LocationListener listener, Looper looper)

它们的签名和描述非常相似,唯一的区别是一个使用LocationCallback,另一个使用LocationListener

抽象类LocationCallback定义了两个方法:

void onLocationAvailability(LocationAvailability locationAvailability)

void onLocationResult(LocationResult result)

接口LocationListener只定义了一种方法

abstract void onLocationChanged(Location location)

不考虑LocationCallback中的附加方法,这两者有什么区别?是否存在一些概念差异或特殊用例使一个比另一个更可取?复制功能的基本原理是什么?

【问题讨论】:

【参考方案1】:

您会注意到 onLocationResult() 返回 LocationResult - 这使得同时接收多个位置变得更加容易 - 如果您通过设置正确批处理位置请求,您会经常遇到这种情况setMaxWaitTime().

如果您选择使用较旧的LocationListener,批处理时您将连续收到多个对onLocationChanged() 的回调。

【讨论】:

嗯。这个批处理看起来很有趣。如果我做对了,我可以发出一个间隔为 10 秒的 LocationRequest,并将 MaxWaitTime 设置为 100 秒,然后在一个 LocationResult 中获取所有 10 个(或更多或更少)位置。可能有用。赞成。 是的!在许多现代手机上,批处理直接在 GPS 芯片上完成,这意味着主 CPU 根本不需要在批处理之间唤醒,从而带来了一些令人印象深刻的电池改进。 我很喜欢简短的回答,它可以准确地告诉我我需要知道什么! 我正在使用 locationcallback,我想每秒钟获取一次位置更新,为此我在 locationrequest 对象中添加了 1 秒的间隔为locationRequest = new LocationRequest() .setInterval(1000) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setFastestInterval(1000);,但我仍然每 10 秒获取一次位置更新。你能解释一下为什么会这样吗? @ianhanniballake @JaydipKalkani - setInterval 文档明确表示“此间隔不准确。您可能根本不会收到更新(如果没有可用的位置源),或者您收到更新的速度可能比请求的慢”

以上是关于LocationListener LocationCallback 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Android Location LocationListener 总是调用 onProviderDisabled

何时使用 LocationManager/LocationListener VS。 LocationServices/LocationCallback 跟踪用户位置?

获取位置android Kotlin

为 Fused location API 添加 addGpsStatusListener

Android Location Client 无法解析方法

com.google.android.gms.location 不见了