如果我想覆盖设备上所有应用程序(包括谷歌地图)的其他来源的GPS位置,在这种情况下,外部GPS定位器是否需要更改源代码?
我已经看过使用过模拟位置,但据我所知,这些模拟数据无法输入Google地图,因此不起作用?
源代码更改还是有其他方法吗?
公平地说,在需要改变的源代码的正确方向上的一点也会很好!
答案 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);
操作系统应该阻止你成功(如果没有,这将是一个主要的安全漏洞)。