2016-03-10 1 views
0

Я старался cordovaGeolocation link Я вставил один и тот же код в своем приложении, он отлично работает для меня, когда приложение открыто, мне нужно получить эту геолокацию и отправить ее к серверу, в то время как приложение находится в фоновом режиме, поэтому используется фоновый режим cordova см. backgroundMode documentation link.Угловая js cordovaGeolocation получает текущую позицию и отправляет данные на сервер в фоновом режиме

  1. Я получаю геолокацию и отправку на сервер работает нормально, когда приложение открыто.
  2. Я использовал onpause и onresume cordova также для состояния приложения, как в родном андроиде.
  3. Когда приложение находится в onpause, я использовал background enable(), внутри onactivate(), заданный интервал и получая геолокацию и отправку на сервер.
  4. После того, как приложение переходит в onpause и возвращается в onresume, приложение получает геолокацию и отправляет сервер отлично.

app.run(['$rootScope', '$location','$mdToast','$cordovaPush', '$sessionStorage', '$cordovaDevice', 
 
'$cordovaLocalNotification', '$timeout','$cordovaGeolocation','$interval','Service', 
 
    function($rootScope, $location,$mdToast,$cordovaPush, $sessionStorage, $cordovaDevice, 
 
    $cordovaLocalNotification, $timeout,$cordovaGeolocation,$interval,Service) { 
 
document.addEventListener("resume", function() { 
 
       console.log("The application is resuming from the background"); 
 
    cordova.plugins.backgroundMode.disable(); 
 
      }, false); 
 
      document.addEventListener("pause", function() { 
 
        console.log("The application is pausing to the background"); 
 
        cordova.plugins.backgroundMode.enable(); 
 
       }, false);  
 
     var i=0; 
 
     cordova.plugins.backgroundMode.onactivate = function() { 
 
     console.log("notificationReceived"); 
 
     setInterval(function() { 
 
     console.log("interval: "+ i++); 
 
     var posOptions = {timeout:3000,enableHighAccuracy: false}; 
 
     $cordovaGeolocation 
 
      .getCurrentPosition(posOptions) 
 
      .then(function (position) { 
 
      var GeoLocation=new Object(); 
 
      GeoLocation.geo_location_latitude=position.coords.latitude; 
 
      GeoLocation.geo_location_longitude=position.coords.longitude; 
 
      Service.CurrentService(GeoLocation).success(function(data){ 
 
       console.log(new Date()); 
 
       console.log("cur loc: "+JSON.stringify(data)); 
 
      }).error(function(data){ 
 
       console.log("error: "+JSON.stringify(data)); 
 
      }) 
 
      }, function(err) { 
 
      console.log("Error: "+err); 
 
      // here Position Error Occurs 
 
      // error 
 
      }); 
 
},60000); 
 
    } 
 
     })];

Ошибка, когда приложение закрывается или идет OnPause, получение Позиция Сообщение об ошибке: Время ожидания истекло при получении геолокации и не отправляет данные на сервер. Посмотрите на это кодирование и дайте мне понять, как это сделать. Заранее спасибо.

ответ

0

вы можете попробовать это:

app.run(['$rootScope', '$location','$mdToast','$cordovaPush', '$sessionStorage', '$cordovaDevice', 
'$cordovaLocalNotification', '$timeout','$cordovaGeolocation','$interval','Service', 
    function($rootScope, $location,$mdToast,$cordovaPush, $sessionStorage, $cordovaDevice, 
    $cordovaLocalNotification, $timeout,$cordovaGeolocation,$interval,Service) { 
document.addEventListener("resume", function() { 
       console.log("The application is resuming from the background"); 
    cordova.plugins.backgroundMode.disable(); 
      }, false); 
      document.addEventListener("pause", function() { 
        console.log("The application is pausing to the background"); 
        cordova.plugins.backgroundMode.enable(); 
       }, false);  
     var i=0; 
     cordova.plugins.backgroundMode.onactivate = function() { 
     console.log("notificationReceived"); 
     setInterval(function() { 
     console.log("interval: "+ i++); 
     var posOptions = {timeout:3000,enableHighAccuracy: true}; 
     $cordovaGeolocation 
      .getCurrentPosition(posOptions) 
      .then(function (position) { 
      var geo = {}; 
      geo.location_latitude=position.coords.latitude; 
      geo.location_longitude=position.coords.longitude; 
      Service.CurrentService(geo).success(function(data){ 
       console.log(new Date()); 
       console.log("cur loc: "+JSON.stringify(data)); 
      }).error(function(data){ 
       console.log("error: "+JSON.stringify(data)); 
      }) 
      }, function(err) { 
      console.log("Error: "+err); 
      // here Position Error Occurs 
      // error 
      }); 
},60000); 
    } 
     })]; 

ИЛИ вы можете изменить:

$http({ 
    url : 'yourserverURL', 
     method: 'POST', 
     data: obj, 
    header:{'Content-Type':'application/json; charset=utf-8'} 

    }).success(function (data,status,headers,config){ 
       console.log(new Date()); 
       console.log("cur loc: "+JSON.stringify(data)); 

    }).error(function (data,status,headers,config){}); 

вместо

Service.CurrentService(geo).success(function(data){ 
        console.log(new Date()); 
        console.log("cur loc: "+JSON.stringify(data)); 
       }).error(function(data){ 
        console.log("error: "+JSON.stringify(data)); 
       }) 

** Вы можете также попытаться поместить его в контроллер

+0

Спасибо, я попробую и вернусь назад –