【问题标题】:Android LocationProvider test does not trigger onLocationChanged()Android LocationProvider 测试不会触发 onLocationChanged()
【发布时间】:2015-08-21 20:06:24
【问题描述】:

我正在尝试在 Android 中测试 GPS,所以我遵循了这个建议 Testing GPS in Android

我的MainActivity 班级是这样的:

public class MainActivity extends Activity implements LocationListener {
...
private LocationManager locationManager;
...

protected void onCreate(Bundle savedInstanceState) {
    ...
    this.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    ...
}

...

protected void onResume() {
    ...
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    this.locationManager.requestLocationUpdates(Constants.GEOPOSITIONING_UPDATE_PERIOD,Constants.GEOPOSITIONING_UPDATE_DISTANCE, criteria, this, null);
    ...
}

...

public LocationManager getLocationManager() {
    return this.locationManager;
}

...
}

我的测试课是这样的:

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
...
@UiThreadTest
public void test001() {
    LocationManager locationManager = null;

    try {
        MainActivity mainActivity = getActivity();

        locationManager = mainActivity.getLocationManager();
        locationManager.addTestProvider("Test", false, false, false, false, true, true, true, 0, 5);
        locationManager.setTestProviderEnabled("Test", true);

        Location location = new Location("Test");
        location.setLatitude(10.0);
        location.setLongitude(20.0);
        location.setAltitude(0);
        location.setTime(System.currentTimeMillis());
        location.setElapsedRealtimeNanos(System.currentTimeMillis());
        location.setAccuracy(Criteria.ACCURACY_FINE);
        locationManager.setTestProviderLocation("Test", location);

        ...
    } finally {
        if (locationManager != null) {
            locationManager.removeTestProvider("Test");
        }
    }
}

...
}

但是MainActivityonLocationChanged 永远不会被调用,即使在调用setTestProviderLocation 之后也是如此。

PS:我在清单中使用&lt;uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /&gt; 权限。

【问题讨论】:

    标签: android gps locationmanager android-testing


    【解决方案1】:

    我写了我找到的here,看看吧,它也可能对你有帮助。

    另外,我注意到您使用“测试”作为您的测试提供者,但在您的活动中,您根据标准使用requestLocationUpdates。这是另一个问题。您需要确保您正在模拟您的位置的提供者与您的应用程序期望从其接收回调的提供者相同。

    因此,如果您的 Activity 正在等待来自 gps 提供者的位置,则您不能在 Test 提供者上模拟位置并期望在 Activity 中接收它们。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      将“测试”替换为 LocationManager.GPS_PROVIDER 或 LocationManager.NETWORK_PROVIDER,具体取决于您要模拟哪一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        相关资源
        最近更新 更多