实时地图应用Android

Posted

技术标签:

【中文标题】实时地图应用Android【英文标题】:Real time Mapping application Android 【发布时间】:2013-08-29 09:37:08 【问题描述】:

我需要两个创建一个 android 地图应用程序,该应用程序将具有两种类型的客户端和一个 Web 服务。

客户类型 1(要跟踪的客户) 需要跟踪该客户端的位置并实时发送到服务器。最多会有 10-15 个此类客户

客户端类型 2(查看所有类型 1 客户端的客户端) 这些客户端需要实时显示类型 1 客户端的位置(延迟时间最好小于 10-15 秒)。请求数据的客户端可以有 100 个类型 2。

网络服务 将在每个请求中以 JSON 形式返回类型 1 客户端的最新位置。这将用 php 编写,mysql 将用于存储客户端类型 1 信息。

客户端类型 1 和类型 2 是 Android 客户端。

除了定期在客户端类型 2 上进行验证和在客户端类型 1 上定期发布数据之外,实现此目标的最佳(最有效和最优雅的方法)是什么。

【问题讨论】:

长轮询或 websocket 可以防止需要来自客户端 2 的轮询。 【参考方案1】:

我只是让客户端类型 2 每 xx 秒轮询一次 Web 服务,具体取决于您希望它刷新的频率。

您可以使用推送通知,但由于有很多客户端类型 2,您会发送很多通知。

此外,推送通知等内容的目标是在更新速度不可预测且相对罕见的情况下使非活动应用程序保持最新状态。以新闻应用为例,它只对真正的重大新闻使用通知。 “重大新闻”可能需要几天的时间才能发生,并且您不希望应用程序在非活动状态下不断轮询。

但是,您的应用听起来是因为无论如何它只会在活动时工作,并且必须以固定的速度进行更新。

假设以上关于您的应用的情况,使用推送通知或套接字不会导致比简单地以固定速率使用轮询来减少电池使用量或其他因素。

【讨论】:

是的,您对应用程序的假设是正确的。是的,Push 确实是不可能的。 所以对客户端 2 使用简单的轮询,不需要把事情复杂化;)【参考方案2】:

客户类型 1 看看LocationListener 类,它会在客户端位置更改时触发事件。

网络服务 在每个位置更新事件上存储时间戳并提供两个服务端点。可以提供所有类型 1 客户端的位置。另一个可以提供自 Timestamp X 以来类型 1 客户端的所有位置。

客户端类型 2 在启动时拉回所有类型 1 客户端的位置并存储 time now() 的时间戳。每 X 秒轮询您的服务以查找自上一个时间戳以来已更改的记录。存储更新的时间戳。

此方法在您的服务器上的工作稍微困难一些,因为您的每个类型 2 客户端将请求不同的信息,因此缓存很困难,但由于服务器仅存储 10-15 个类型 1 客户端的数据,这应该没有问题。它将减少网络流量,因为没有为尚未移动的 1 类客户端发送数据。

调查长轮询/网络套接字(更高的电池消耗)的优势有限,并且对于听起来像前台应用程序的东西来说,推送通知似乎有点高维护。

【讨论】:

是的,我计划做类似的事情。只是想知道是否有任何其他/更好的方法可以做到这一点。【参考方案3】:

对于任何偶然发现这个问题的人:

您还可以使用 Java WebSocket 在 android 应用程序和服务器之间进行双向通信。更新 client2 的位置后,您可以将其推送到服务器,然后使用 websocket 连接在 client1 应用程序上更新它。

https://github.com/TooTallNate/Java-WebSocket

对于 ios:https://github.com/square/SocketRocket

【讨论】:

以上是关于实时地图应用Android的主要内容,如果未能解决你的问题,请参考以下文章

Android 实时谷歌地图位置跟踪

Android:使用谷歌地图实时获取当前坐标

Android开发 百度地图开发(定位传感器应用)

百度地图----->地图类型定位模式实时交通我的位置加入覆盖物覆盖物详情及提示

如何从firebase数据库检索经度和经度到android地图应用程序

来自服务器的谷歌地图实时位置更新