Android setOnMyLocationChangeListener已被弃用

25

Android Google Maps的setOnMyLocationChangeListener方法现已过时。 有人知道如何解决这个问题吗?谢谢。


7
我喜欢胆怯的投票,但我希望能够解释一下为什么。 - dieter
3个回答

14

23
是的,这正是文档所说的,但我认为 OP 的意图是他们目前正在使用 OnMyLocationChangeListener.onMyLocationChange 来获取在地图上移动蓝点时的回调,他们想要找到一个非废弃的方法来继续做到这一点...但是并没有。非废弃的方法是编写自己的代码来手动启动和停止自己的 FusedLocationApi 位置更新,但我认为这很愚蠢,因为您的参数可能与 Map 使用的不同,因此您可能无法在蓝点移动时同时获取更新。 - swooby
14
我同意swooby的看法,他们删除了在地图上移动时获取我的位置的非常简单的方法,同时map.getMyLocation()也已经被弃用。现在,谷歌正在强制我们编写自己的代码,并“推销”给我们谷歌播放服务是最适合开发人员的,但实际上他们只会给我们带来越来越多的问题。 - zapotec

4

请求位置更新(https://developer.android.com/training/location/request-updates)中有详细的步骤说明。简而言之,

1) 定义变量。

val fusedLocationProviderClient by lazy {
    LocationServices.getFusedLocationProviderClient(requireContext())
}

val locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult?) {
        locationResult ?: return
        for (location in locationResult.locations){
            moveToLocation(location)
        }
    }
}

val locationRequest = LocationRequest.create().apply {
    interval = 10_000
    fastestInterval = 5_000
    priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}

2) 请求位置更新。确保您事先获取了位置权限。

fusedLocationProviderClient.requestLocationUpdates(
    locationRequest,
    locationCallback,
    Looper.getMainLooper()
)

3) 完成后,删除更新。

fusedLocationProviderClient.removeLocationUpdates(locationCallback)

或者您可以像这样快速获取用户位置: fusedLocationProviderClient?.lastLocation?.addOnSuccessListener { userLocation -> } - Eugene P.
任何解决方案在Java中吗? - Fernando Torres
https://developer.android.com/training/location/request-updates#java 在Java中展示了相同的内容。 - solamour

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接