我正在尝试在安卓系统中测试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");
}
}
}
...
}但是MainActivity的onLocationChanged永远不会被调用,即使在调用setTestProviderLocation之后也是如此。
PS:我在清单中使用了<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />权限。
发布于 2015-08-03 05:45:21
我写了我发现的here,看看它,它可能也会对你有帮助。
另外,我注意到您使用“测试”作为您的测试提供者,但在您的活动中,您使用的是基于标准的requestLocationUpdates。这是另一个问题。您需要确保模拟您的位置的提供程序与您的应用程序期望从其接收回调的提供程序相同。
因此,如果您的活动正在等待来自gps提供程序的位置,您不能在Test提供程序上模拟位置并期望在活动中接收它们。
希望能有所帮助。
发布于 2015-08-21 20:06:25
将“测试”替换为LocationManager.GPS_PROVIDER或LocationManager.NETWORK_PROVIDER,具体取决于您要模拟的是哪一个。
https://stackoverflow.com/questions/29221174
复制相似问题