Cordova中的问题 - 离子背景模式插件

时间:2016-12-19 12:49:41

标签: javascript angularjs cordova ionic-framework

我在项目中使用后台模式插件。

我想在设备处于[设备准备模式]时将设备的地理位置插入数据库。

当用户切换到[后台/暂停]模式时,设备的地理位置将不会插入数据库。

地理位置每三秒钟插入数据库。

当我将设备模式切换到[背景]模式时,它会继续将地理位置插入数据库。

问题是什么?



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

1 个答案:

答案 0 :(得分:0)

所有onDeviceReady()确实检查设备是否准备就绪,所以即使它在后台仍然会被插入,因为它是一个插件,用于获取背景中的地理位置(你猜对了)。请使用http://ngcordova.com/docs/plugins/geolocation/,因为它更适合您的需求。