这是我在应用程序中设置模拟位置的方式:
public void startMockLocation(String latitude, String longitude){
FusedLocationProviderClient locationProvider = new FusedLocationProviderClient(getApplicationContext());
locationProvider.setMockMode(true);
Location loc = new Location("gps");
mockLocation = new Location("gps");
mockLocation.setLatitude(Double.valueOf(latitude));
mockLocation.setLongitude(Double.valueOf(longitude));
mockLocation.setAltitude(loc.getAltitude());
mockLocation.setTime(System.currentTimeMillis());
mockLocation.setAccuracy(1f);
mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mockLocation.setBearingAccuracyDegrees(0.1f);
mockLocation.setVerticalAccuracyMeters(0.1f);
mockLocation.setSpeedAccuracyMetersPerSecond(0.01f);
}
locationProvider.setMockLocation(mockLocation);
}
但是我无法使用下面的代码清除模拟位置并重新设置真实位置。我应该写些什么呢?
public void clearMockLocation() {
locationProvider.setMockMode(false);
}
您可以使用给定的LocationManager方法在removetestProvider()
的帮助下刷新或重置模拟位置;
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
到目前为止,您的问题正在遵循以下步骤,例如:
您应该按照以下步骤clear/reset
您的模拟位置,例如:
向Manifest.xml
即添加权限
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
现在再次打开GoogleMaps,并等到Gps提供者收到新的实时位置。这可能会比较耗时,即(1-3 minutes
)。
因此,在删除提供程序时,只需让Gps接收新的新位置,即可解决并修复它。如果万一它不能再工作,那么您可以进一步执行以下步骤:
转到应用程序设置,清除应用程序缓存,并重新启动 移动设备。
我希望它会很好用。您也可以访问这些参考文献以获得更好的直觉: