如何使用Phonegap跟踪设备位置(iOS和Android)设备

时间:2013-07-11 02:00:04

标签: android ios geolocation cordova

我想知道用户何时到达或离开某个位置。我试图使用无线网络(检查移动设备)来做到这一点,但我出于几个原因无法做到。

1)我需要实时更新或每隔1到5分钟有关哪些设备已连接以及哪些设备刚刚断开连接的信息。

2)我在同一个网络上从我的电脑到我的iPhone有很高的ping(仍然不知道为什么)。

现在我想使用在iOS上暂停或在Android后台运行的Phonegap应用程序(在后台运行)中使用地理定位来实现它。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:25)

更新于2019年5月25日

我在下面的原始答案是6岁,与当前的移动操作系统版本相比已过时。 例如,部分唤醒锁不再适用于现代Android版本。

今天我的推荐是(如果你有一个严肃的商业应用而不是业余爱好项目)使用cordova-background-geolocation plugin的付费版本Transistorsoft。 免费版适用于iOS,但对于Android,需要许可证,其成本约为数百美元。 不过我认为价格是值得的:在我10年多的创建位置感知移动应用程序的经验中,这是我遇到的最复杂,最可靠的解决方案。 对于许可证的费用,您可以访问不断更新和维护的私人仓库,以便与新版本的Android&的iOS。

如果您正在寻找免费/开源解决方案,我会选择cordova-plugin-background-geolocation,它是Transistorsoft原始插件的开源分支。 不过我使用这个插件的经验却取得了不小的成功;由于是免费/开源的,它的更新频率不如付费的Transistorsoft插件。 我遇到了问题,因为Android最近版本中对背景位置有了更严格的限制,需要很长时间才能解决或根本没有修复(请参阅插件的issue list)。

原始答案(2013年6月11日)

首先要说的是,创建一个在后台运行时接收位置更新的Phonegap应用程序是完全可能的,但并非无足轻重。我自己完成了,并在Android和iOS平台上发布了应用程序。

如果您需要准确而定期的位置更新,我建议您在目标设备上使用GPS接收器。在Phonegap中,您可以在请求位置更新时设置“highAccuracy”标志。 watchPosition()函数将在设备从GPS接收器接收更新时提供新的位置信息,因此您可以使用以下内容:

navigator.geolocation.watchPosition(successCallback, errorCallback, {
  enableHighAccuracy: true,
  timeout: 10000,
  maximumAge: 0
});

有关详细信息,请参阅Phonegap geolocation API documentation(请注意在Android和iOS上运行此功能所需的权限)。

要让您的应用在Android或iOS后台运行,您需要设置各自的本机开发环境:Eclipse for Android,XCode for iOS。您将无法使用Phonegap Build,因为在这两种情况下都需要自定义设置才能使其正常工作。有关如何执行此操作,请参阅Phonegap platform guides

要让您的应用在Android上保持在后台运行,您需要编写自定义Android服务,或者您可以执行我所做的操作并使用Phonegap插件获取“部分唤醒锁”(see here)保持您的应用在后台运行,并在屏幕关闭时接收位置更新。请注意,此插件的original version已过期,不适用于更新版本的Phonegap,也不支持部分唤醒锁。但是,我已经更新并扩展了它供我自己使用:您可以在我对this question的回答中找到它的源代码。

要让您的应用在iOS后台运行,您需要做的事情略有不同;你不需要一个插件,只需要一个项目设置。

您可以手动编辑项目.plist并添加值“UIBackgroundModes”键,其值为“location”,或者在XCode中打开项目,添加“Required Background Modes”键,其值为“App”注册位置更新“。这将导致iOS在每次收到位置更新时触发您使用watchPosition()注册的JS回调函数。 See here了解有关iOS项目密钥和background modes的更多信息。

希望这有帮助!