我试图在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");
}
}
}
...
}
但即使在致电onLocationChanged
之后,也永远不会调用MainActivity
的{{1}}。
PS:我在清单中使用setTestProviderLocation
权限。
答案 0 :(得分:0)
我写了我发现的here,查看它,它也可以帮到你。
另外,我注意到你正在使用&#34;测试&#34;作为您的测试提供商,但在您的活动中,您会根据条件使用requestLocationUpdates
。这是另一个问题。您需要确保模拟您所在位置的提供商与您的应用程序期望从中接收回调的提供商相同。
因此,如果您的活动正在等待gps
提供商的位置,则您无法模拟Test
提供商处的位置,并希望在活动中收到这些位置。
希望它有所帮助。
答案 1 :(得分:0)
替换&#34;测试&#34;通过LocationManager.GPS_PROVIDER或LocationManager.NETWORK_PROVIDER,具体取决于您要模拟的那个。