2011-05-25 14 views
5

我正在尝试开发一款使用GPS的应用程序,并且我想将XTRA数据和时间参考注入GPS以便获得更快的修复。我的代码是下面一个:互联网连接帮助将数据注入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连接(如果无线网络是倒没什么错误消息)的下一个日志消息出现:

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之外,还有什么方法可以获得关于这些问题的更多信息? (我无法根据我的设备)。

预先感谢您

回答

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。
+0

快速问题...为什么互联网连接可用的机会? – baash05 2013-03-31 14:02:34

+0

必须投票下来,有很多应用程序可以下载,似乎只是做这件事,他们使连接到GPS更快。同样,虽然很多手机都是目标,但是有很多人可能会针对那些只有在硬件位于底座时才连接的设备。 (思考企业应用程序) – baash05 2013-05-06 07:15:16

+0

确实有有效的用例。一个是当你知道你将没有数据连接。假设您在国外并已禁用数据漫游,但您可以在某些地方(在酒店,公共热点或类似地点)使用WiFi连接。在这种情况下,您可以在有WiFi的情况下手动下载AGPS数据,并且可以使用该数据一段时间。如果没有这个,你将无法使用AGPS,并会等待长达20分钟才能修复。 – user149408 2014-05-04 21:33:50