位置更新的频率随着后台位置跟踪和FusedLocationApi而降低

时间:2015-04-20 07:41:19

标签: android android-pendingintent fusedlocationproviderapi

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);
    } 
}

非常感谢任何帮助。

2 个答案:

答案 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;
}