【发布时间】:2017-05-08 15:09:28
【问题描述】:
我正在为应用程序使用 FusedLocationProvider API。设备的位置应该定期更新,因为预计用户会一直在四处走动,并且应用程序的行为应该根据当前的设备位置而有所不同。
为了使主线程免受网络请求的影响,我想将用于检索位置数据的代码移动到单独的加载器中。但是,我不知道将这部分代码放在哪里:
locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(UPDATE_INTERVAL)
.setFastestInterval(FASTEST_INTERVAL);
try{
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
}catch (SecurityException a){Log.w(TAG,"No location permission.");}
如果我把它放在LoaderClass中,在loadInBackground()中调用这个方法,就会出现错误java.lang.NullPointerException: Calling thread must be a prepared Looper thread.
一次次调用Loader也感觉很不对劲。 所以我的问题是如何使用 Loaders 实现 requestLocationUpdates,以便 Loader 更新我可以在 onLoadFinished() 中检索的更改位置并更新相应的 UI?我应该如何处理需要覆盖的位置侦听器的 onLocationChanged() 方法?或者是否有另一种有效的方法可以将 FusedLocationProvider 移到后台线程中?
如果有人可以在这里帮助我,那就太好了,非常感谢!
【问题讨论】:
标签: java android multithreading loader fusedlocationproviderapi