2012-03-06 11 views
3

現在のGPS位置をサーバーに送信するphonegapアプリケーションを開発しています。そのために、私たちは、次のコードを持っている:Phonegap geolocation.watchPositionがiPhone上の場所を更新しない

navigator.geolocation.watchPosition(gpsTracker.onNewCoordinates, gpsTracker.onError, { 
    enableHighAccuracy : true, 
    maximumAge: 4000, //should be default, just in case 
    timeout: 5000 
}); 

コールバック関数は、結果を提出するの世話をします。 Androidのテストデバイスでは、この機能はうまく動作しています。しかし、私たちがiOSデバイスで同じコードを実行するときは、GPS受信がうまくいけば2つの座標を送信して停止する以外は通常何もしません。

iOSは一度しか情報を取得しないように見えます。新しい座標がある場合はコールバック関数をトリガーしません。

この問題と同様の経験/解決方法をお持ちの方?

+0

PhoneGap 1.8.1以降、これは修正されているようです。 – ThinkingStiff

答えて

3

私は次のように問題を解決しました。 navigator.geolocation.watchPositionはiOSではうまく動作していないようです。今、GPSの位置が正確に5秒ごとに返される

navigator.geolocation.getCurrentPosition(gpsTracker.onNewCoordinates, gpsTracker.onError, { 
    enableHighAccuracy : true, 
    maximumAge: 4000, // should be default, just in case 
    timeout: 5000 
}); 

:私の代わりにgetCurrentPosition 5秒ごとに呼び出すJavaScriptのsetIntervalを使用してコードを書き直しました。

+1

興味のあるあなたは、アプリが最小化されている/背景にこれを実行する方法を見つけましたか? – Christopher

+0

私のアプリケーションでは、アプリケーションをオンにする必要があります。いくつかのアンドロイドデバイスでは、画面がロックされるとロギングが続行されます。 iOSでも可能です。 Matt Raible氏は素敵なアプリケーション(http://www.play-more.com)を作成し、これについての非常に興味深いブログを書いています:http://raibledesigns.com/rd/entry/my_html5_with_play_scala – dvtoever

+0

あなたの時間を節約します。ジオロケーション やオーディオなどのバックグラウンドサービスが必要な場合は、ネイティブが必要です。 PhoneGapなどを使用することを余儀なくされています。彼らはタッチのための300ミリ秒の遅延を追加し、Webアプリケーションのバックグラウンドタスクをサポートしません。これは意図されたものです。彼らは私たちが店舗用のネイティブアプリを作りたいと思っています。 – kaulusp

0

これを見てください: http://groups.google.com/group/phonegap/browse_thread/thread/58f7ff98170b16c4 iOS用に保存されているgeolocator.start()とstop()について書かれているものがあります。これはおそらく助けになるだろうか?

私の経験によると、GPSは有効な位置を提供するためには「ホット」でなければなりません。つまり、衛星などに接続するのに十分な時間を与えなければなりません。通常、あなたがただ一つのポジションを選んだだけではありません。私のHTCでは、getCurrentPositions()によって得られた値はあまりにも不正確であることが判明しています(例えば、50m以内など)。だから、startWatching()を使って解決策を見つけるためにもう一度試してみるのが正しい方法かもしれません。

関連する問題