首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android LocationProvider测试不触发onLocationChanged()

Android LocationProvider测试不触发onLocationChanged()
EN

Stack Overflow用户
提问于 2015-03-24 05:54:07
回答 2查看 488关注 0票数 1

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

我的MainActivity类是这样的:

代码语言:javascript
复制
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;
}

...
}

我的测试类是这样的:

代码语言:javascript
复制
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:我在清单中使用了<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />权限。

EN

回答 2

Stack Overflow用户

发布于 2015-08-03 05:45:21

我写了我发现的here,看看它,它可能也会对你有帮助。

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

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

希望能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-08-21 20:06:25

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29221174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档