2

我使用下面的代码来设置模拟位置,而不需要 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);
}
4

0 回答 0