如何在 Kotlin 中请求 GPS 位置更新
Posted
技术标签:
【中文标题】如何在 Kotlin 中请求 GPS 位置更新【英文标题】:How to request for GPS location updates in Kotlin 【发布时间】:2021-12-09 23:02:51 【问题描述】:我正在开发一个需要每 2-3 秒访问一次用户位置的 android 应用程序(使用 Kotlin)。在过去的几天里,我一直在研究(和测试)解决方案,但我似乎只找到了 Java 中的示例(不容易翻译成 Kotlin)。我也无法从Android's tutorials 中理解它。
我已经做了什么:
请求权限(前台和后台 GPS 位置访问) 在尝试使用之前确保它们已被接受 实现了onLocationChanged()
方法
访问了最后一个位置(并使用它)
我想更新位置,以便通过访问最后一个位置,我可以使用 Android 知道的最新位置。
这是我尝试过的,我认为可能更接近实际解决方案(但这绝对是错误的):
val locationListener: LocationListener = this
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener
)
这样做的正确方法是什么?谢谢。
【问题讨论】:
“我正在开发一个 Android 应用程序(使用 Kotlin),它需要每 2-3 秒访问一次用户的位置”——无法保证您可以获得位置,更不用说更新频繁地。 “我也无法从 Android 的教程中理解它”——您可能想就您不理解的内容提出问题。 “这是我尝试过的东西,我认为它可能更接近实际的解决方案(但这绝对是错误的)”——可以想象它是正确的,但我们不知道你的结果是什么。 FWIW,this sample project 显示在后台获取位置 - 它在 this book 中进行了介绍。 Here is another sample project,用于使用活动和前台服务——this book 涵盖了这一点。 @CommonsWare 我在我的问题中显示的代码的结果是 Android Studio 给我一个错误说None of the following functions can be called with the argument supplied
。 this 写在实现 LocationListener(和其他)的活动中。可能是什么原因造成的?
LocationListener
的import
是指android.location.LocationListener
,还是指其他名为LocationListener
的东西?您需要传递 android.location.LocationListener
作为第四个参数。
@CommonsWare 非常感谢!正如你所建议的,我不小心导入了com.google.android.gms.location.LocationListener
,而不是android.location.LocationListener
。我的代码现在可以完美运行了。
【参考方案1】:
首先你可以在 Kotlin 中使用 java 代码。如果你复制粘贴 java 代码,Android Studio 会自动将 java 转换为 kotlin。
对于谷歌地图更新,您使用新的谷歌地图 API。 检查这些链接以实现新的 google map api 请求: https://***.com/a/62155149/16728174 https://developers.google.com/maps/documentation/android-sdk/start
然后位置更新使用间隔:
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5);
mLocationRequest.setFastestInterval(1);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
查看此链接以获取有关 setFastestInterval(); 和 setInterval(); 差异的信息: https://***.com/a/26407873/16728174
【讨论】:
感谢您的回答。我知道当在编辑器中粘贴某些内容时,Android Studio 会自动将 java 代码转换为 kotlin 代码,并且我还可以将 java 文件与其他 kotlin 文件一起使用。但是,例如,当我粘贴您的代码时,它会在 LocationRequest() 上显示错误,就像在 this 图像中一样。而且我不希望更改代码以使用新的 google map api(另外,我不需要显示地图。我只需要获取位置),而只是请求位置更新!谢谢。 好吧,请检查这些答案。希望这些信息对您有所帮助:***.com/questions/1513485/… 我也已经尝试过了,但是在这种情况下转换为 kotlin 并尝试适应它也不起作用...... 女巫的部分不起作用?请通过屏幕截图或在此处粘贴您的代码详细说明您的问题,其他人也可以提供帮助。您是否有运行时错误(异常和...)或者您的代码甚至无法在设备上运行? 我现在在主要问题下添加了一条评论,解释说......“我在我的问题中显示的代码的结果是 Android Studio 给我一个错误说None of the following functions can be called with the argument supplied
。this 写在一个实现 LocationListener(和其他)的 Activity 中。可能是什么原因造成的?” - 我在问题中显示的代码来自您给我链接的确切答案。我不确定是什么问题。以上是关于如何在 Kotlin 中请求 GPS 位置更新的主要内容,如果未能解决你的问题,请参考以下文章
在 android 中获取更新位置和禁用 GPS 后如何获取?