多个LocationClients干扰?

时间:2014-01-23 18:53:43

标签: android google-play-services location-client

我正在开发一个由服务和活动组成的应用程序。该服务使用LocationClient-object来请求当前位置每分钟。单击按钮后,活动使用另一个LocationClient-object请求单个当前位置

在服务中:

mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(60000);
mLocationRequest.setFastestInterval(60000);
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);

在活动中:

mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(0); // 0 should be ok since only a single location is requested
mLocationRequest.setFastestInterval(0);
mLocationRequest.setNumUpdates(1); // get only a single location
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);

仅服务就像预期的那样。

但是,如果服务已启动并且活动尝试获取单个当前位置,则它会在服务收到更新的位置之前收到该位置。所以活动必须等待60秒。

但是,如果服务未启动且活动尝试获取单个当前位置,则它会在预期的短时间后(通常<5秒)收到该位置。

导致问题的原因是什么?每个应用只允许一个LocationListener吗?

1 个答案:

答案 0 :(得分:1)

首先 - 如果您需要立即位置,请不要请求位置更新,只需在您的位置客户端上调用getLastLocation()即可。如果LocationClient有一个可用的,那么这将为您提供最佳/最新的位置结果。如果没有,那么我会要求更新。

第二 - 我认为单个应用中您可以拥有多少位置客户端是有限制的,但是,我认为您错过了这些客户与Google Play服务进行交互以接收更新的方式。查看docs提供了一些见解。

如果向下滚动到有关指定更新参数的部分,您会看到LocationClient位于您和您寻找的位置数据之间。实施LocationClient的电话上的所有其他应用都会尝试访问相同的数据。 LocationClient尝试在您要求的时间间隔内填写您的请求。但是,由于使用LocationClient的其他应用可能尝试访问相同的数据,因此无法保证时间安排。最好的例子是setFastestInterval():

  

调用LocationRequest.setFastestInterval()也有助于节省电量。   通过呼叫请求首选更新速率时   LocationRequest.setInterval(),并通过调用最大速率   LocationRequest.setFastestInterval(),然后你的应用程序获得相同   更新速率是系统中最快的速率。如果有其他应用程序   要求更快的速度,您可以获得更快的速度。如果不   其他应用有更快的费率请求,您的应用收到   使用LocationRequest.setInterval()指定的速率更新。

当您收到更新时,并未直接链接到您的请求时。有时它会更快,有时会更晚。间隔仅仅是一种偏好。