谷歌地图V2中的'constructor LocationRequest()'已经被弃用吗?

66

我最近看到了这条消息,我很确定在18.0.0之前的版本中这个构造函数没有被弃用,但是我找不到任何信息表明这个构造函数已被弃用。

那么我们应该使用什么替代品呢?有没有其他方法来创建locationRequest

投诉 LocationRequest() 被废弃的消息

10个回答

137

是的,LocationRequest构造函数已经被弃用。您可以使用它的静态方法LocationRequest.create()来创建一个位置请求。

Kotlin:

locationRequest = LocationRequest.create().apply {
    interval = 100
    fastestInterval = 50
    priority = LocationRequest.PRIORITY_HIGH_ACCURACY
    maxWaitTime = 100
}

Java:

locationRequest = LocationRequest.create()
    .setInterval(100)
    .setFastestInterval(3000) 
    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
    .setMaxWaitTime(100);

更新

正如@Shimon所指出的那样,LocationRequest.PRIORITY_HIGH_ACCURACY现在已经被弃用,因此请使用Priority.PRIORITY_HIGH_ACCURACY


1
啊!太好了!这个版本是从哪个版本开始引入的? - Roar Grønmo
7
我认为在版本18.0.0之后构造函数已被弃用。LocationRequest.create() 一直存在来创建请求,但是在版本18之后,他们添加了“setWaitForAccurateLocation(true)”,用于您的LocationRequest。 - Kunu
4
现在它已经被弃用。 - Sadique Khan
9
LocationRequest.create()现已过时,您应该使用LocationRequest.Builder() - Joaquin Iurchuk
1
@KonstantinKonopko 请确保您正在使用 implementation "com.google.android.gms:play-services-location:21.0.0"。这样,您就不应该使用 API 31 中的 LocationBuilder,而是应该使用 Play Services。 - Joaquin Iurchuk
显示剩余2条评论

77

LocationRequest.create().apply{ ... }现在也已被弃用。

请改用LocationRequest.Builder()。例如:

(locationIntervallocationFastestIntervallocationMaxWaitTime对应于以前使用create()时使用的值)

        locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, locationInterval)
            .setWaitForAccurateLocation(false)
            .setMinUpdateIntervalMillis(locationFastestInterval)
            .setMaxUpdateDelayMillis(locationMaxWaitTime)
            .build()
请阅读更多内容:https://developer.android.com/reference/android/location/LocationRequest.Builderhttps://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.Builder

3
不确定 Kotlin 是否也是这样,但对于 Java,需要在 LocationRequest.Builder(...) 前加上 new - Anatol Bivol
2
@AnatolBivol 在 Kotlin 中通常不需要它。 - Roar Grønmo
Builder 只有一个参数,请查看答案中添加的链接。 - Konstantin Konopko
1
@KonstantinKonopko,是的,你说得对。我引用了错误的链接,下面我添加了实际链接作为替代。 - Roar Grønmo
1
这是这个问题的新正确答案。我已经构建了这种方式,并只想确认新方法与旧字段名称的关系。这立即证实了我的想法,甚至不需要检查文档。@RoarGrønmo 谢谢! - Pieter van der Vyver

13

这行代码已被弃用: priority = LocationRequest.PRIORITY_HIGH_ACCURACY

替换成 priority = Priority.PRIORITY_HIGH_ACCURACY


6
对于JAVA,我已使用以下代码进行修复
private LocationRequest locationRequest;

在 onCreate() 方法中

locationRequest = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 100)
            .setWaitForAccurateLocation(false)
            .setMinUpdateIntervalMillis(2000)
            .setMaxUpdateDelayMillis(100)
            .build();

5

更新:

常量PRIORITY_HIGH_ACCURACY已弃用,使用Priority.PRIORITY_HIGH_ACCURACY代替。

 private fun updateLocationTracking(isTracking: Boolean) {
        if(isTracking) {
            if(TrackingUtility.hasLocationPermissions(this)) {
                val request = LocationRequest.create().apply {
                    interval = LOCATION_UPDATE_INTERVAL
                    fastestInterval = FASTEST_LOCATION_INTERVAL
                    priority =  Priority.PRIORITY_HIGH_ACCURACY
                }
} 

5

对于在Flutter的geolocator 8.0.1中遇到此错误的任何人,请尝试暂时编辑FusedLocationClient.java:199。然后等待作者更新pub包。

来自:

LocationRequest locationRequest = new LocationRequest();

To

LocationRequest locationRequest = LocationRequest.create();

这是 LocationRequest 类。 enter image description here

3
2023年5月 Kotlin:
import com.google.android.gms.location.LocationRequest

locationRequest = LocationRequest.Builder(1000L).setPriority(Priority.PRIORITY_HIGH_ACCURACY).build()

对于类似PRIORITY_HIGH_ACCURACY的优先级,请使用.setPriority()。同时,对于这样的请求,不需要应用apply方法,因为它们返回相同的Builder以便链式调用。 - George
@George,我更新了我的答案以展示另一种选择,但是有什么区别吗? - Lance Samaria
关于Builder - 没有太大的区别,只是避免同时使用两个构建器模式 关于.setPriority() - 使用Priority.*常量的setGranularity()会出现错误。谢谢! - George

2

至少有两种不同的LocationRequests

本文讨论的是谷歌地图,但对于那些寻找谷歌地图之外的位置更新的人们,最近也有一些变化。

使用setQuality(LocationRequest.QUALITY_HIGH_ACCURACY)设置HIGH_ACCURACY。

val fastLocationRequests = LocationRequest.Builder(1000L) // interval specified in millis so this is every 1 second
    .setQuality(LocationRequest.QUALITY_HIGH_ACCURACY)
    .setMaxUpdateDelayMillis(0L) // Note 0 represents no batching allowed 
    .build()

使用替代的Builder()

val slowLocationRequests = LocationRequest.Builder(fastLocationRequests)
    .setIntervalMillis(60000L) // once per minute
    .build()

文档


0
 LocationRequest locationRequest = LocationRequest.create() //if you want access of variable
                            .setInterval(100)
                            .setFastestInterval(3000)
                            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                            .setNumUpdates(1)
                            .setMaxWaitTime(100);

2
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - TeachMeJava

0
我也遇到了这个问题。他们每隔一天就会废弃一个方法,并发布新的方法。 您可以使用以下代码片段: locationRequest = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, locationInterval) .setWaitForAccurateLocation(false) .setMinUpdateIntervalMillis(locationFastestInterval) .setMaxUpdateDelayMillis(locationMaxWaitTime) .build(); 在此之前先声明所有变量。

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