2

Google Play Services 的 Fused Location Provider 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);
    } 
}

任何帮助是极大的赞赏。

4

2 回答 2

0

这可能是因为设备中的某些其他应用程序必须请求更频繁的更新。请参阅此链接了解更多详情

这个间隔是不准确的。您可能根本不会收到更新(如果没有可用的位置源),或者您收到更新的速度可能比请求的慢。您也可能比请求更快地收到它们(如果其他应用程序以更快的间隔请求位置)。可以使用 setFastestInterval(long) 控制您将接收更新的最快速率

于 2015-08-15T07:12:33.317 回答
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;
}
于 2017-06-28T10:20:49.553 回答