在Android中设置模拟位置是不准确的(距离最后一个位置只有一半的距离)

时间:2018-04-04 20:55:51

标签: android android-testing android-location

对于UI测试,我尝试设置模拟位置。我的应用程序是位置感知。我试图在应用程序中测试该逻辑。

第一个位置设置正确。但是,第二个位置通常不准确。大多数情况下,第二个位置最终是第一个和第二个位置之间的中间点。当我重复设置第二个位置时,实际的设备GPS位置移动得更近,但仍然没有移动到实际的第二个位置。

以下是日志的摘录:

First call to set mock location works perfectly:
setMockLocation: Set location to: latitude: 34.001 longitude: -118.485
onLocationResult: Got new location
checkIfBuildingDiscovered: Called with latitude: 34.001 longitude: -118.485

设置模拟位置的第二次调用缩短了一半距离:

moveNorth: Attempted distance: 300
moveNorth: Actual distance: 298.92993
moveNorth: new location: latitude: 34.00369494585236 longitude: -118.485
    setMockLocation: Set location to: latitude: 34.00369494585236 longitude: -118.485
Got new location
getMinDistanceFromCurrentBuildings: Current location: latitude: 34.0023474 longitude: -118.485
getMinDistanceFromCurrentBuildings: Distance from previous location: 149.45686

以下是我设置模拟位置的方法:

Location location = new Location(LocationManager.GPS_PROVIDER);
location.setLatitude(latitude);
location.setLongitude(longitude);
// Set other parameters to make the location complete.

locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, location);
Log.i(LOG_TAG, "setMockLocation: Set location to: latitude: " + latitude
        + " longitude: " + longitude);

以下是模拟位置服务的启用方式:

locationManager.addTestProvider(
        LocationManager.GPS_PROVIDER,
        false,
        false,
        false,
        false,
        true,
        true,
        true,
        Criteria.POWER_LOW,
        Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
locationManager.setTestProviderStatus(
        LocationManager.GPS_PROVIDER,
        LocationProvider.AVAILABLE,
        null,
        System.currentTimeMillis());

我最好的猜测是Android设备在某种程度上不喜欢太大的位置跳跃。它可能会假定读数错误。因此,它可能会尝试使用之前的GPS读数对其进行平均,以限制可能的错误读数。

我的Android测试如何将位置设置为特定的模拟位置并确保它是实际位置?

PS:当我尝试在Android模拟器中手动设置位置时,我注意到类似的行为。我将输入一个新的GPS位置并点击发送。地图活动将更新我的GPS坐标方向的位置。每次我点击发送,它都会靠近它。其他时候,我输入新的GPS坐标,点击发送,地图活动将直接更新。

0 个答案:

没有答案