Google Play服务的融合位置提供程序Api允许您使用位置侦听器或待处理意图请求位置更新。我可以使用位置监听器成功请求位置更新,但我一直在努力用挂起的意图复制相同的行为。对于后者,我启动了一个处理位置数据的意图服务。我在测试期间注意到的是,位置更新与我在位置请求中设置的间隔相对应。然而,随着时间的推移,即使位置请求中的间隔保持不变,更新之间的间隔也会大大增加。我已经多次使用多个设备注意到这种行为。有没有人知道会发生什么?
前景位置跟踪
protected void requestLocationUpdates()
{
mIsTracking = true;
LocationRequest locationRequest = mLocationRequests.get(mPreviousDetectedActivity.getType());
if (locationRequest != null)
{
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
}
}
@Override
public void onLocationChanged(Location location)
{
Log.i(TAG, "onLocationChanged");
handleLocationChanged(location);
}
后台位置跟踪
protected void requestLocationUpdates()
{
LocationRequest locationRequest = mLocationRequests.get(mPreviousDetectedActivity.getType());
if (locationRequest != null)
{
mResultCallabackMessage = "Request location updates ";
PendingIntent pendingIntent = getLocationPendingIntent();
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
locationRequest, pendingIntent).setResultCallback(this);
}
}
protected PendingIntent getLocationPendingIntent()
{
if (mLocationPendingIntent != null) return mLocationPendingIntent;
Intent intent = new Intent(this, LocationUpdatesIntentService.class);
mLocationPendingIntent = PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
return mLocationPendingIntent;
}
public class LocationUpdatesIntentService extends IntentService
{
public LocationUpdatesIntentService()
{
// Use the TAG to name the worker thread.
super(TAG);
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
protected void onHandleIntent(Intent intent)
{
Bundle bundle = intent.getExtras();
Location location = (Location) bundle.get(FusedLocationProviderApi.KEY_LOCATION_CHANGED);
handleLocationUpdates(location);
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
可能是因为设备中的某些其他应用程序必须请求更频繁的更新。有关详细信息,请参阅此link
此间隔不准确。您可能根本没有收到更新(如果没有) 位置来源可用),或者你可能会收到它们比 请求。您也可能比请求更快地收到它们(如果是其他的话) 应用程序以更快的间隔请求位置)。该 可以控制您将收到更新的最快速率 setFastestInterval(长)
答案 1 :(得分:0)
我也有同样的问题,但是 @Shiv 表示你应该测试不同的参数:
mClient.requestLocationUpdates(LocationRequest.create(), mLocationIntent)
试试这个:
mClient.requestLocationUpdates(createLocationRequest(), mLocationIntent)
private LocationRequest createLocationRequest() {
LocationRequest locationRequest = new LocationRequest();
locationRequest.setInterval(UPDATE_INTERVAL);
locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setMaxWaitTime(MAX_WAIT_TIME);
return locationRequest;
}