在Java Web Start中检索地理位置



我正在帮助开发一个Java Web Start*应用程序,并正在寻找检索用户位置的方法。一个理想的解决方案是像JSR-179这样使用最好的可用硬件的解决方案,但如果不能做到这一点,则可以更直接地与GPS硬件接口(如果可用)。

有人实现过这样的东西吗?如果是,你采取了什么方法

由于我还没有找到任何类似JSR-179的API,我正在研究一些潜在的解决方案,但它们都有缺点:

  1. 从(虚拟)串行端口读取GPS数据。
    • 只支持通过串行端口连接的硬件
    • 据我所知,我们无法自动检测要使用哪个端口,因此必须允许用户对此进行配置。这远非理想
  2. 使用HTML5的Geolocation API,通过ScriptEngine API与之接口。
    • 我以前从未使用过这两种方法,所以我不知道在这一点上这有多可行

有人能提出其他潜在的方法吗?或者告诉我我的任何一个想法是否都是死胡同

*尽管我们目前使用Web Start,并且更愿意继续这样做,但如果可以实现地理定位,我们可能会考虑放弃它,转而使用getdown之类的东西。

编辑:我最初没有说明的另一个要求是,我们需要能够跟踪用户的当前位置,而不仅仅是他们启动应用程序时的位置。

与其将应用程序部署为Java Web Start应用程序,不如将其部署为小程序。在这种情况下,可以通过LiveConnect调用浏览器API。

ScriptEngine API不会帮助您,因为它没有链接到支持Geolocation API的浏览器。此外,Java Web Start完全独立于浏览器(与小程序不同,您可以关闭浏览器,应用程序将继续工作),因此无法调用Geolocation API。

一种解决方案是通过使用HTML5地理定位API的外部机制向JWS应用程序提供位置参数。例如,不是直接调用JNLP文件来启动应用程序,而是加载一个带有JavaScript代码段的页面,查询Geolocation API,然后调用JSP文件的URL:

http://www.example.com/myapp/launcher.jsp?latitude=....&longitude=....

launcher.jsp页面将生成具有适当参数的JNLP文件:

<resources>
  <property name="jnlp.myapp.latitude"  value="<%= request.getParameter("latitude") %>"/>
  <property name="jnlp.myapp.longitude" value="<%= request.getParameter("longitude") %>"/>
</resources>

然后,您可以在应用程序中检索坐标作为系统属性。

如果您只对用户的静态位置感兴趣,这将起作用。如果用户移动,您将无法跟踪他。

一个问题和想法不仅仅是一个答案。

您的用户运行的硬件是什么?我猜是一台笔记本电脑
你能坚持让用户也有一部智能手机,并编写一个小应用程序来查询他们的GPS位置并将其报告给你的主应用程序吗
(他们可能已经有了智能手机,所以这可能不是一个过度的要求)

这种报告可以通过手机将位置上传到互联网上的中央数据库,应用程序下载信息来完成,也可以通过某种方式从手机无线发送到笔记本电脑。

最新更新