2013-07-11 117 views
15

我想知道用户何时到达或离开特定位置。我正在尝试使用无线网络来执行此操作(查看移动设备),但出于几个原因,我无法完成此操作。如何使用Phonegap跟踪设备位置(iOS和Android)设备

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

2)我在同一个网络上从PC到我的iPhone的ping程度非常高(仍然不知道为什么)。

现在我想要使用iOS中暂停或在Android中的后台运行的Phonegap应用程序(在后台运行)中使用地理位置。

任何帮助,将不胜感激。

回答

24

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

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

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

有关详细信息,请参阅Phonegap geolocation API documentation(注意了所需的权限在Android和iOS上完成这项工作)。

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

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

为了让您的应用程序在iOS上的后台运行,您需要稍微改变一些内容;你不需要插件,只需要一个项目设置。

您可以手动编辑项目.plist并添加值为“位置”的键“UIBackgroundModes”键,或者在XCode中打开项目后添加“所需的背景模式”键值为“应用程序注册位置更新“。这会导致iOS在每次收到位置更新时触发您使用watchPosition()注册的JS回调函数。 See here了解更多关于iOS项目密钥和background modes的信息。

希望这会有所帮助!

+0

谢谢你的回答,我需要设备每5分钟更新一次位置,我可以控制它,对吗?只要设备具有互联网连接,它应该工作。 – amarruffo

+1

如果要以固定的时间间隔更新位置,可以使用超时来调用getCurrentPosition(),例如, 'setTimeout(function(){navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{enableHighAccuracy:true})},5 * 60 * 1000)'如果设备有GPS接收器,则不需要互联网连接来接收位置更新。 – DaveAlden

+2

发生了什么我需要通过Web服务插入到数据库上的位置,是否会从后台工作?我在某处说,Web服务不会被调用,对此有什么想法?谢谢你的帮助。 – amarruffo