2016-05-02 7 views
0

地図上で友達を見つけるためのソーシャルネットワークであるcordovaにAppを作成します。ジオロケーションは、アプリケーションがフォアグラウンドにあるときに正常に機能します(cordova-plugin-geolocationプラグインを使用)。 しかし、アプリがバックグラウンドにあるときにも機能したいと思っています。これを行うには、私はこのように働いて、コルドバ・プラグイン・バックグラウンド・モードを使用しています:私は一時停止中にアプリを入れたとき、私は私でこれを持っているので、cordova - 地理的位置情報がアプリの背景にタイムアウトする

var geolocID; 
window.onload = function(){ 
     document.addEventListener("deviceready", init, false); 
     document.addEventListener("resume", function() { console.log("resume with id :" + geolocID); navigator.geolocation.clearWatch(geolocID); init();},false); 
     document.addEventListener("pause", geolocBackground,false);//function() {setTimeout(function(){console.log("TEST");},5000)},false); 
    } 

    function geolocBackground() 
    { 
     console.log("In geolocaBackground " + ", ID = " + geolocID); 
     navigator.geolocation.clearWatch(geolocID); 
     console.log("ID = " + geolocID); 

     geolocID = navigator.geolocation.watchPosition(positionSuccessBackground,positionError,{timeout: 5000}); 
     console.log("Geolocation end"); 
    } 


    function init() 
    { 
     geolocID = navigator.geolocation.watchPosition(positionSuccess, positionError, {enableHighAccuracy: true, timeout: 60000, frequency: 10000}); 

     cordova.plugins.backgroundMode.enable(); 
     cordova.plugins.backgroundMode.onactivate = function(){console.log("Backgound mode activated"); 
                   cordova.plugins.backgroundMode.configure({silent: false}); 
                   }; 
     cordova.plugins.backgroundMode.ondeactivate = function() {console.log("Backgound mode disabled");}; 
    } 

bacgkoundモードが働くようですコンソール:

In geolocaBackground , ID = 707e54f8-fb99-fb36-2855-341b45f3d774 
ID = 707e54f8-fb99-fb36-2855-341b45f3d774 
Geolocation end 
resume with id :707e54f8-fb99-fb36-2855-341b45f3d774 

しかし、ジオロケーションがタイムアウトエラー、コード3を返し、動作しませんでした... 私は私のコードが間違っているのか理解していない、私はウェブ上で何かを見つけることができませんでした。アプリはバックグラウンドで携帯電話の位置情報にアクセスできないようです。コードは実行されますが、機能しない唯一のロケーション関数です。もし誰かがこの問題に関するいくつかの知識を持っていれば、それは非常に高く評価されます:) あなたのお手伝いをありがとう

答えて

0

感謝を。 私はジオロケーションをバックグラウンドで、クロムの有無にかかわらず、あるいは数メートル歩くことに成功させることはできませんでした。 AndroidサービスとJavaでGPSトラッカーをコーディングすることで、私はそれを自分で解決するので、アプリが閉じられたときに私のアプリケーションはユーザーを追跡します。

0

うまくいけばこれは同じです私が持っていた問題。私のコードは以下の通りです: start() { cordova.plugins.backgroundMode.enable(); var gpsOptions = { maximumAge: 2000, timeout: 5000, enableHighAccuracy: true }; document.addEventListener('deviceready', function() { var GpsLog = []; this.gpsChecker = Observable.timer(0, 4000); this.gpsChecker.subscribe(() => { navigator.geolocation.getCurrentPosition(position => { var deviceLog = { type: 'Device Location', value: position.coords.longitude + "," + position.coords.latitude } this._api.uploadLog(deviceLog); }, null, gpsOptions); }); }); }

(私はイオン2とタイコーを使用していますがプリンシパルは同じです)あなたのアプリがバックグラウンドにあるとき、デバイスのGPS位置への「優先」アクセス権がないという問題でした(とにかく)。私のアプリがバックグラウンドになると、ジオロケーションを取得する前に外を歩く(約15メートル)必要があります。アプリケーションがフォアグラウンドで実行されていれば、数秒ごとにジオロケーションを取得します。あなたのタイムアウトとあなたの最大年齢のパラメータを下げて、澄んだ空の中で散歩のためにデバイスを取ってみてください。

1

そのクロムのバグ、見てください。あなたの答えのための

https://bugs.chromium.org/p/chromium/issues/detail?id=585055

+1

あなたの答えは問題を説明しますが、解決策を提示しません(おそらくタイミングのため)。そのバグレポートのコメントは、https://github.com/Geotab/cordova-background-watchpositionに役立った解決策を示しています。答えを更新してください。 –

関連する問題