0

我正在帮助开发 Java Web Start* 应用程序,并且正在寻找检索用户位置的方法。一个理想的解决方案是使用最好的可用硬件的JSR-179之类的东西,但如果失败,那么更直接地与 GPS 硬件(如果可用)接口是一种可能的选择。

有没有人实施过这样的事情,如果是这样,你采取了什么方法?

由于我无法找到任何类似 JSR-179 的 API,因此我正在研究几个潜在的解决方案,但它们都有缺点:

  1. 从(虚拟)串行端口读取 GPS 数据。
    • 仅支持通过串行端口连接的硬件。
    • 据我所知,我们无法自动检测要使用的端口,因此必须允许用户配置它。这远非理想!
  2. 利用 HTML 5 的Geolocation API ,通过ScriptEngine API与之交互。
    • 我以前从未使用过其中任何一个,所以我不知道这在这一点上有多可行!

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

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

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

4

3 回答 3

1

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

于 2012-07-19T15:03:34.343 回答
0

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

一种解决方案是通过使用 HTML5 Geolocation API 的外部机制向 JWS 应用程序提供位置参数。例如,不是直接调用 JNLP 文件来启动应用程序,而是加载一个带有查询 Geolocation API 的 JavaScript 片段的页面,然后调用 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>

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

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

于 2012-07-19T10:04:19.377 回答
0

一个问题和想法不仅仅是一个答案,但这里有。

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

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

于 2012-07-19T10:44:05.650 回答