工作管理器的位置更新不起作用
Posted
技术标签:
【中文标题】工作管理器的位置更新不起作用【英文标题】:Location Update from Work Manager Doesn't work 【发布时间】:2021-05-13 00:23:58 【问题描述】:最近我一直在尝试实现逻辑,以便使用工作管理器从 FusedLocationProviderClient 获取位置更新,每 15 分钟一次(因为这是最小的后台执行延迟)。但是 FusedLocationProviderClient 的 requestLocationUpdates() 函数每 15 分钟失败一次,我无法从中获得成功结果任务,我总是得到失败的结果。当我从 fusedlocationproviderclient 打印异常时,它只打印“null”?有什么帮助吗?
片段:
private fun addWorker()
val workRequest = PeriodicWorkRequestBuilder<MyWorker>(15, TimeUnit.MINUTES)
.build()
val workManager = WorkManager.getInstance(requireContext())
workManager.enqueueUniquePeriodicWork(
"MyMainWorker",
ExistingPeriodicWorkPolicy.KEEP,
workRequest
)
工人
class MyWorker(context: Context, wp: WorkerParameters) :
Worker(context, wp)
private val LOCATION_UPDATE_INTERVAL = TimeUnit.MINUTES.toMillis(4)
private val LOCATION_FASTEST_UPDATE_INTERVAL = TimeUnit.MINUTES.toMillis(2)
private var ctx: Context = context
override fun doWork(): Result
return if (getLocationUpdate())
Log.d("MyWorker", "SUCCESS")
Result.success()
else
Log.d("MyWorker", "FAILURE")
Result.failure()
@SuppressLint("MissingPermission")
private fun getLocationUpdate(): Boolean
val fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(ctx)
val locationCallback = object : LocationCallback()
override fun onLocationResult(result: LocationResult?)
super.onLocationResult(result)
result?.locations?.let locations ->
for (location in locations)
Log.d("MyWorker", "NEW Location: $location")
val locationRequest = LocationRequest().apply
interval = LOCATION_UPDATE_INTERVAL
fastestInterval = LOCATION_FASTEST_UPDATE_INTERVAL
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
val result = fusedLocationProviderClient.requestLocationUpdates(
locationRequest,
locationCallback,
Looper.getMainLooper()
)
Log.d("MyWorker", result.exception?.message.toString())
Log.d("MyWorker", result.exception?.cause.toString())
Log.d("MyWorker", result.exception.toString())
return result.isSuccessful
错误
I/WM-WorkerWrapper: Worker 结果 FAILURE for Work [ id=3fe5b78d-e0ed-4348-90b6-25c2c1f96bfd,标签= com.example.testapp.MyWorker ]
【问题讨论】:
【参考方案1】:注意:Google Play 商店已更新其有关设备的政策 位置,限制后台位置访问需要它的应用程序 核心功能并满足相关政策要求。 采用这些最佳做法并不能保证 Google Play 会批准 您的应用在后台使用位置信息。
详细了解与设备位置相关的政策变更。 https://support.google.com/googleplay/android-developer/answer/9799150
【讨论】:
以上是关于工作管理器的位置更新不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如果 gps 打开,位置管理器不起作用。如果 gps 打开,它工作正常
正如 Fusion Location Provider API 所声称的那样,位置更新在室内不起作用