首先要說的是,創建一個在後臺運行時接收位置更新的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的信息。
希望這會有所幫助!
謝謝你的回答,我需要設備每5分鐘更新一次位置,我可以控制它,對嗎?只要設備具有互聯網連接,它應該工作。 – amarruffo
如果要以固定的時間間隔更新位置,可以使用超時來調用getCurrentPosition(),例如, 'setTimeout(function(){navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{enableHighAccuracy:true})},5 * 60 * 1000)'如果設備有GPS接收器,則不需要互聯網連接來接收位置更新。 – DaveAlden
發生了什麼我需要通過Web服務插入到數據庫上的位置,是否會從後臺工作?我在某處說,Web服務不會被調用,對此有什麼想法?謝謝你的幫助。 – amarruffo