我使用下面的代码来设置模拟位置,而不需要 Location 权限。
但是,该代码在 Android 设备上与使用FusedLocationProviderClient
. 有时它按预期工作,有时位置不断来回跳跃,有时它根本不起作用。我也经常因错误而崩溃java.lang.IllegalArgumentException: Provider “gps” already exists
。基本上,这是糟糕的代码,我想在我的应用程序中摆脱它。
我正在寻找的是一个完整的解决方案,能够成功地伪造设备的位置(不需要位置许可),就像这个Fake GPS app一样。我希望用 Java 重新创建该应用程序。截至 2020 年 5 月,我还没有在网上找到任何完全有效的东西。感谢您的帮助。
void setMockLocation() {
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false,
false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
Location mockLocation = new Location(LocationManager.GPS_PROVIDER);
mockLocation.setLatitude(-33.852); // Sydney
mockLocation.setLongitude(151.211);
mockLocation.setAltitude(10);
mockLocation.setAccuracy(5);
mockLocation.setTime(System.currentTimeMillis());
mockLocation.setElapsedRealtimeNanos(System.nanoTime());
locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation);
}