覆盖内部GPS Android以用于导航

时间:2012-01-26 09:56:31

标签: android gps location override

如果我想覆盖设备上所有应用程序(包括谷歌地图)的其他来源的GPS位置,在这种情况下,外部GPS定位器是否需要更改源代码?

我已经看过使用过模拟位置,但据我所知,这些模拟数据无法输入Google地图,因此不起作用?

源代码更改还是有其他方法吗?

公平地说,在需要改变的源代码的正确方向上的一点也会很好!

1 个答案:

答案 0 :(得分:0)

这是您应该如何使用自定义模拟提供程序:

    //Instantiate in your activity
    LocationManager lm = getSystemService(LOCATION_SERVICE);

    //Add a test provider
    lm.addTestProvider("myprovider", false, false, false, false, true, true, true, Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);

    //Update the last location your provider will serve
    Location fakeLoc = ...;
    lm.setTestProviderLocation("myprovider", fakeLoc);

    //Using your custom location provider
    LocationProvider customProvider = lm.getProvider("myprovider");

您可以查看最重要方法的文档here

当每个应用程序选择使用哪个提供程序时,您不能强迫它们使用您的提供程序。此外,客户端应用程序应具有权限ACCESS_MOCK_LOCATION,这是您无法强制执行的另一项操作。

但您可以尝试使用默认的gps提供程序名称注册模拟提供程序:

    lm.addTestProvider(LocationManager.GPS_PROVIDER, false, false, false, false, true, true, true, Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);

操作系统应该阻止你成功(如果没有,这将是一个主要的安全漏洞)。