2016-12-19 51 views
0

我在我的項目中使用背景模式插件。Cordova中的問題 - 離子背景模式插件

我想在設備處於[deviceready mode]時將設備的地理位置插入到數據庫中。

當用戶切換到[background/pause]模式時,設備的地理定位將不會被插入到數據庫中。

地理位置每三秒鐘插入數據庫。

當我將設備模式切換到[背景]模式時,它不斷插入地理位置到數據庫。

有什麼問題?

var app = angular.module('starter', ['ionic', 'ngCordova']); 
 
var globLat; 
 
var globLong; 
 
var db = null; 
 

 
app.run(function ($ionicPlatform, $cordovaSQLite) { 
 
    $ionicPlatform.ready(function() { 
 
    if (cordova.platformId === "ios" && window.cordova && window.cordova 
 
     .plugins.Keyboard) { 
 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
 
     cordova.plugins.Keyboard.disableScroll(true); 
 
    } 
 

 
    if (window.StatusBar) { 
 
     StatusBar.styleDefault(); 
 
    } 
 

 
    db = window.openDatabase("mobileDB", "1.0", "Cordova Demo", 
 
     200000); 
 
    $cordovaSQLite.execute(db, 
 
     "CREATE TABLE IF NOT EXISTS coords (latDB float , longDB float)" 
 
    ); 
 
    /* 
 
    var query = "INSERT INTO coords (latDB, longDB) VALUES (?,?)"; 
 
    $cordovaSQLite.execute(db, query, [globLat, globLong]); */ 
 

 
    document.addEventListener("deviceready", onDeviceReady, false); 
 

 
    function onDeviceReady() { 
 

 
     setInterval(function() { 
 
     var query = 
 
      "INSERT INTO coords (latDB, longDB) VALUES (?,?)"; 
 
     $cordovaSQLite.execute(db, query, [globLat, globLong]); 
 

 
     }, 3000); 
 
    } 
 

 
    }); 
 

 
}) 
 

 
app.controller('GeoCtrl', function ($cordovaGeolocation, $cordovaSQLite) { 
 

 
    var posOptions = { 
 
    timeout: 10000, 
 
    enableHighAccuracy: false 
 
    }; 
 
    $cordovaGeolocation 
 
    .getCurrentPosition(posOptions) 
 
    .then(function (position) { 
 
     var lat = position.coords.latitude 
 
     var long = position.coords.longitude 
 

 
     globLat = lat; 
 
     globLong = long; 
 

 
     // alert("latitude is : " + globLat + "and longitude is :" + globLong); 
 

 
    }).then(
 
     function initMap() { 
 
     var uluru = { 
 
      lat: globLat, 
 
      lng: globLong 
 
     }; 
 
     var map = new google.maps.Map(document.getElementById('map'), { 
 
      zoom: 18, 
 
      center: uluru 
 
     }); 
 
     var marker = new google.maps.Marker({ 
 
      position: uluru, 
 
      map: map 
 
     }); 
 
     }); 
 
});

注:

我使用的Visual Studio 2015年紋波仿真器切換設備模式 enter image description here

回答

0

所有onDeviceReady()不會被檢查設備已準備就緒,所以即使盡管在後臺它仍然會被插入,因爲它是一個用於獲取地理位置的插件(你猜對了)的背景。改用http://ngcordova.com/docs/plugins/geolocation/,因爲它更適合您的需求。

+0

是的,但我已經使用地理位置插件。 我只需要在設備處於後臺模式時插入的地理位置。 – saifaldeen

+0

然後請放上完整的代碼,上面的代碼沒有提及正在使用哪個以及它如何使用。 – Olli

+0

我已經更新了代碼:) – saifaldeen