Java 如何在Android上模拟位置?

Java 如何在Android上模拟位置?,java,android,location,android-fusedlocation,mock-location,Java,Android,Location,Android Fusedlocation,Mock Location,我使用下面的代码设置模拟位置,而不需要位置权限 但是,Android设备上的代码与最新的Google Play Services版本不一致,后者使用了FusedLocationProviderClient。有时它能按预期工作,有时位置不断来回跳跃,有时根本不起作用。我还经常遇到错误java.lang.IllegalArgumentException:Provider“gps”已经存在的崩溃。基本上,这是糟糕的代码,我想在我的应用程序中去掉它 我要寻找的是一个完全可靠的解决方案,能够成功地伪造设备

我使用下面的代码设置模拟位置,而不需要位置权限

但是,Android设备上的代码与最新的Google Play Services版本不一致,后者使用了
FusedLocationProviderClient
。有时它能按预期工作,有时位置不断来回跳跃,有时根本不起作用。我还经常遇到错误
java.lang.IllegalArgumentException:Provider“gps”已经存在的崩溃。基本上,这是糟糕的代码,我想在我的应用程序中去掉它

我要寻找的是一个完全可靠的解决方案,能够成功地伪造设备的位置(不需要位置许可),就像这样。我希望用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);
}