协助数据注入GPS

时间:2011-05-25 14:41:47

标签: android gps locationmanager supl

我正在尝试开发一个使用GPS的应用程序,我想将XTRA数据和时间参考注入GPS,以便更快地修复。我的代码是以下代码:

Bundle bundle = new Bundle();
boolean xtraInjection=locationmanager.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_xtra_injection",bundle);
boolean timeInjection=locationmanager.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_time_injection",bundle);

无论互联网连接是打开还是关闭(没有蜂窝也没有wifi),xtraInjection和timeInjection布尔值始终为真。所以,我无法检测到辅助信息是否良好 注入GPS。

启用wifi连接后,将显示下一条日志消息(如果wifi关闭,则不会显示错误消息):

I/app (  627): timeInjection:true
....
D/GpsLocationProvider(   96): NTP server returned: 1306322421969 (WedMay 25 13:20:21 GMT+02:00 2011) reference: 338139 certainty: 77 systemtime offset: 7162
D/lib_locapi( 96): loc_eng_inject_time, uncertainty = 77

相反,没有与XTRA数据相关的日志消息。如果XTRA数据仍然有效,系统不会请求它吗?我怎样才能看出它是否成功注入?

为了进行这些测试,我也尝试删除辅助数据,但我知道这样做不好:

我的代码:

boolean reset=locationmanager.sendExtraCommand(LocationManager.GPS_PROVIDER, "delete_aiding_data", null);

日志:

I/app (  627): reset:false
D/lib_locapi(   96): loc_eng_ioctl for aiding data deletion returned 0, 1 for success

我也尝试过GPS STATUS应用程序,结果与注入和删除相同。

简而言之,我不知道问题是在我的代码中还是在驱动程序实现中。除了logcat之外,有什么方法可以获得有关这些问题的更多信息吗? (我无法使用我的设备)。

提前谢谢

1 个答案:

答案 0 :(得分:3)

如果查看frameworks/base/services/java/com/android/server/location/GpsLocationProvider.java,您会发现这些命令将始终返回true。

你应该这样做的原因很少,以及为什么你不应该这样做的原因:

  • Android会在启动后首次启动网络时自动注入时间和XTRA数据。时间不需要重新注入,因为GPS芯片将在其固定时将其内部时钟与GPS同步。 GPS芯片将在需要时自动请求新的XTRA数据。
  • XTRA仅适用于Qualcomm GPS芯片组。其他供应商确实有相同的服务,但这些服务没有像XTRA那样在GpsLocationProvider中公开。
  • 可能会有互联网连接。在这种情况下,GPS只需在需要时从SUPL服务器下载星历表,只有在不可能的情况下才会回到XTRA。