gpt4 book ai didi

android - 如何将 FusedLocationProviderClient 实现为服务?

转载 作者:IT老高 更新时间:2023-10-28 13:46:10 26 4
gpt4 key购买 nike

自从新的 Android 8 更新发布以来,有很多 limitations 强加于后台服务的工作方式。

所以我的应用需要在后台定期获取用户的位置,为此,我考虑使用 Android 网站建议的 FusedLocationProviderClient。获取位置后,我只需要对信息进行一些简单的处理。

现在我开发了这个代码示例:

private fun updateLocation(){
//Location Request
val mLocationRequest = LocationRequest();
mLocationRequest.smallestDisplacement = 1000f;
mLocationRequest.interval = 5*60*1000;
mLocationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;

//Location Provider
val mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

//Check Location Permission
if(PermissionChecker.checkSelfPermission(this,ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED)

//Request Location
mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest,locationCallback,null);
}

private val locationCallback = object:LocationCallback(){
override fun onLocationResult(locationResult: LocationResult?) {
doSomeWork()
}
}

所以我有一个问题:

问。每次我想更新位置时是否应该使用计划作业?

如果我希望我的应用在 Activity 已关闭的情况下也能获得更新,这听起来像是服务的工作,对吧?但是有了这个新的更新,我的服务不会永远运行,所以它迟早会被杀死。

使用定期安排的作业,服务将在满足条件时启动,但安排定期作业来更新位置似乎有点奇怪,而不是使用利用IntervalSmallestDisplacement 以获得新的更新。

每次满足 LocationRequest 的条件(本示例中的间隔和/或 minimumDisplacement)时,requestLocationUpdates() 都会调用他的回调。这就是我想要完成的工作,我想要一份请求位置更新的工作,不是多个重新安排的工作,因为我需要请求位置的更新。

有没有其他更好的方法来完成我想说的或者我需要这种新的计划工作方法?

无论如何,对于这篇凌乱的帖子感到抱歉,这是我在 Stack Overflow 上的第一个问题谢谢:)

最佳答案

使用 Geofencing API为了那个原因。这为您提供了可以在 IntentService 中处理的 Intent 。无需通知。

您只需在当前位置设置一个半径为 1000m 的新地理围栏,然后等待用户离开。

关于android - 如何将 FusedLocationProviderClient 实现为服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49209279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com