2017-11-20 4 views
6

私はPhoneGapでジオロケーションAPIを使用して移動ルートを追跡しているアプリケーションを開発しました。 navigator.geolocation.watchPosition(function(position) を介して一定の間隔で位置を取得してポリラインを更新します。しかし、問題はそれがバックグラウンドで機能していないということです。つまり、(別のアプリケーションを開いてバックグラウンドで実行しても)ポリラインは更新されません。navigator.geolocation.watchPosition(function(position)関数だから、Cordova-plugin-background-modeこのプラグインを使ってアプリを実行しようとしましたが、バックグラウンドでアプリを実行していて、再び起動していませんでしたnavigator.geolocation.watchPosition(function(position)関数は、 .e(バックグラウンドモードでアプリを実行するためにプラグインをインストールする必要はありませんでした)。だから私はバックグラウンドモードでの位置を得るこの問題を解決するために私を助けてください。そして、もし私がこのCordova-plugin-mauron85-background-geolocationプラグインを使用すれば、私は監視位置を通過していたので、どのようにポジションを取ることができますか?アプリがフォアグラウンドで実行されている場合はどうすればよいですか? watchPosition関数などを使用する必要がありますか?ジオロケーションAPIを使用してphonegapアプリケーションをバックグラウンドで実行しているときに特定の間隔でデバイスの位置を取得するには

答えて

1

location pluginを掘り下げたい場合があります。彼らは彼らが問題を解決したと思っているようです。

速いfiddleとこれを表示するためのアクセス権がある電話機でのテストは、phonegapの問題ではありません。これはOSの問題です。ほとんどの電話機は、バックグラウンドアクティビティ、特にWebブラウザアクティビティを中断するように最適化されています。ネイティブイベントに結び付けて、必要な動作を得るのが最善の方法です。

navigator.geolocation.watchPosition(positionChanged, err, options); 

携帯電話ではバックグラウンドタスクでもすべての接続が開いています。あなたは、拒否しないが応答することができないサーバーへのajax呼び出しを行い、タイムアウトハンドラを追加し、必要な間隔を設定して、ajaxタイムアウトハンドラで場所を確認し、セットアップ新しい呼び出し。

幸運を祈る!

+0

が。 –

0

cordova-plugin-background-modeでサンプルあります:あなたは、バックグラウンドでの間隔で実行するためのAJAXハックをしようとした場合はお知らせ@everyone

var backgroundGeoLocation = window.plugins.backgroundGeoLocation; 

function startGetLocation() { 

var callbackFn = function(location) { 
    console.log('[js] BackgroundGeoLocation callback: ' + location.latitude + ',' + location.longitude); 
    var latitude = location.latitude; 
    var longitude = location.longitude; 
    var pontos = []; 
    if($localStorage.getPontosGps() && $localStorage.getPontosGps().pontos){ 
     pontos = $localStorage.getPontosGps().pontos; 
    } 


    $log.log('lat: ' + latitude); 
    $log.log('long: ' + longitude); 

    if (!_.find(pontos, { 
     latitude: latitude, 
     longitude: longitude 
     })) { 

     pontos.push({ 
     latitude: latitude, 
     longitude: longitude, 
     velocidade: null 
     }); 

     $localStorage.setPontosGps({ 
     isRunning: true, 
     pontos: pontos 
     }); 
    } 
    backgroundGeoLocation.finish(); 
    }; 

    var failureFn = function(error) { 
    console.log('BackgroundGeoLocation error: ' + error); 
    }; 

    backgroundGeoLocation.configure(callbackFn, failureFn, { 
    desiredAccuracy: 10, 
    stationaryRadius: 20, 
    distanceFilter: 30, 
    debug: false, 
    stopOnTerminate: false, 
    locationTimeout: 10, 
    notificationTitle: 'Title', // <-- android only, customize the title of the notification 
    notificationText: 'Collecting geolocation' 
    }); 

    backgroundGeoLocation.start(); 

} 
関連する問題