2017-07-03 4 views
0

私は現在、AngularJS /イオン3.背景ジオロケーションのプラグイン:トラックの場所と更新データベースは5分ごと

を使用してモバイルアプリを開発しています私のユーザーは100メートルの半径内にある場合、私は、すべての時間で追跡する必要がありますどこのユーザーが自分の家の場所にいるのか、誰がそうでないのかを知る必要があります(、アプリがバックグラウンドで実行中であっても、閉じる/終了しても)。

私はこれを実現するために、イオンネイティブの背景ジオロケーションプラグインとcordova-plugin-background-geolocationを使用しました。私の計画は、ユーザーのジオロケーションを5分ごとに確認し、それを家に持ち帰りなさい。

ケース1)2つの場所の距離が<の場合、私はユーザーが「自宅」であることを知っています。その後、私のデータベース(Firebase)のユーザーノードを更新して、ユーザーをisAtHome: trueとマークし、現在のタイムスタンプを追加します。

ケース2)ユーザーが自宅の場所から100m以内にいない場合は、彼にisAtHome: falseとマークし、現在のタイムスタンプを追加します。

私は現在の信号を受信したことを知る必要があるため、ユーザーが移動しなかった場合でもデータベースを更新する必要があります。それ以外の場合、私は彼が彼のスマートフォンを動かさなかったり、止めたりしなかったかどうかわかりません。

私の知りたいことは、私のユーザが自宅にいる場合、isAtHomeの属性をチェックし、trueに設定されている場合は、タイムスタンプをチェックして、このデータは過去15分間に書かれたものである。

私はさまざまなことを試しましたが、Cordova Background Geolocation Pluginを使ってこれを実現する方法と、それが可能なのかどうかはわかりません。

私の質問は:

それは、ユーザーが5分ごとに地理位置情報確認することが可能です(でもバックグラウンド/終了状態で)、私のfirebase DBを適宜更新関数を呼び出しますか?説明したように、ユーザーが過去5分間に移動しなかった場合でも、その場所を受け取る必要があります。

可能でない場合:誰かが別の方法で要件にアプローチする方法のアイデアを持っていますか?

ありがとうございました!

答えて

2

cordova-plugin-background-geolocationで説明したようにあなたは、プラグインのgithubのページから、この例を参照して、場所を取得するにはプラグインの間隔をミリ秒単位で設定することができ、こう述べています。

backgroundGeolocation.configure(callbackFn, failureFn, { 
    desiredAccuracy: 10, 
    stationaryRadius: 20, 
    distanceFilter: 30, 
    url: 'http://192.168.81.15:3000/locations', 
    httpHeaders: { 'X-FOO': 'bar' }, 
    maxLocations: 1000, 
    // Android only section 
    locationProvider: backgroundGeolocation.provider.ANDROID_ACTIVITY_PROVIDER, 
    interval: 60000, // <-- here 
    fastestInterval: 5000, 
    activitiesInterval: 10000, 
    notificationTitle: 'Background tracking', 
    notificationText: 'enabled', 
    notificationIconColor: '#FEDD1E', 
    notificationIconLarge: 'mappointer_large', 
    notificationIconSmall: 'mappointer_small' 
}); 

場合は、この間隔プロパティが唯一の作品ですアンドロイド用。あなたは私たちもこの上で動作することができ、あなたの例1及び2については考えていない場合は

public getLocation: boolean = true; // CREATE A BOOLEAN TO KNOW IF YOU CAN GET LOCATION 

backgroundGeolocation.start(// i've never used this plugin, so i'm assuming this is what starts de background watcher 
() => { 
    if(getLocation == true){ 
     this.getLocation = false; // SET TO FALSE SO IT DON'T DO YOUR FUNCTION THE NEXT TIME IT GETS THE LOCATION 

     // DO YOUR CODE TO SAVE AND CHECK YOUR DATA 
     // IT'S BETTER IF YOU USE A PROMISE, ASYNC/AWAIT FOR THE SAVING CODE 
     yourSavingCodeFunction().then(() => { 
     setTimeout(()=>{ 
      // AFTER 5 MINUTES, SET THE GETLOCATION TO TRUE SO IT CAN DO YOUR FUNCTION AGAIN 
      this.getLocation = true; 
     }, 500000); 
     }); 
    } 
    }, 
    (error) => { 
    // Tracking has not started because of error 
    // you should adjust your app UI for example change switch element to indicate 
    // that service is not running 
    } 
); 

:私はこのような回避策をsugestでしょう。これが役に立ったり、あなたにいくつかのアイデアを伝えたいと思っています:D

+0

ありがとう、Gabriel。私は同様の解決策について考えました。しかし、問題は次のとおりです。デバイスの位置が20分間変化しない場合、 'yourSavingCodeFunction()'はこの時間枠内で実行されません。だから私のDBは更新されず、私は現在の位置情報を持っていません。移動していないユーザーとスイッチオフされた携帯電話の違いを、どうすればわかりますか?ユーザーが自宅にいるかどうかはどうすればわかりますか? –

+0

ユーザーが移動していない場合でも、5分ごとに場所を更新できないのはなぜですか?移動する場合にのみ更新する必要があり、移動しない場合に20分かかる場合がありますか?ユーザーが移動していない場合でも更新する方が、現在の場所を確認して計算する必要がないため、手順が1つ少なくなっているようです。 –

+0

実際、このプラグインは、オーナーがここに記載しているように、iOSのx分ごとに場所を更新することを許可していません:https://forum.ionicframework.com/t/get-location-background-and-foreground-every-5 -minutes-for-private-app/31101/9 –

関連する問題