2015-11-23 145 views
1

我正在为汽车司机开发一个离子应用程序。该应用程序每隔一分钟就会读取一次坐标并将其写入远程服务器,这有助于我跟踪路线并在Google地图上显示汽车。离子+科尔多瓦插件和背景模式

我使用科尔多瓦插件,除非屏幕关闭或应用程序进入后台,否则它工作正常。我安装了katzer cordova-plugin-background-mode,当应用程序进入后台时,我看到消息:应用程序现在处于后台,插件通知我但没有其他任何事情,应用程序停止! 。

没有数据发送到远程服务器,当我恢复应用程序一切恢复正常时,我使用Android平台。我该如何解决?

app.js代码

angular.module('starter', ['ionic', 'ngCordova','LocalStorageModule', 'starter.controllers', 'starter.services']) 

.run(function ($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
     // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
     // for form inputs) 
     if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) { 
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     } 
     if (window.StatusBar) { 
      // org.apache.cordova.statusbar required 
      StatusBar.styleLightContent(); 
     } 

     cordova.plugins.backgroundMode.enable(); 

    }); 
}) 
..... 

controllers.js

angular.module('starter.controllers', []) 

.controller('GeoCtrl', function($scope, $cordovaGeolocation, $cordovaNetwork, $http, $interval) { 


var reloadCoordinates = function() { 

    var watchOptions = { 
    timeout : 10000, 
    enableHighAccuracy: false // may cause errors if true 
    }; 

    var watch = $cordovaGeolocation.watchPosition(watchOptions); 

    watch.then(
    null, 
    function(err) { 
     // error 

    }, 
    function(position) { 
     //Latitudine e Longitudine 
     var lat = position.coords.latitude 
     var lon = position.coords.longitude 

     $scope.latitude = lat 
     $scope.longitude = lon 


     $http.post('http://192.168.1.2/get-data.php', { "lat": lat, "lon" : lon }).then(function(resp) { 
       console.log('Success Lat:'+resp.data.lat+' Lon:'+resp.data.lon); 
       watch.clearWatch(); 

      }, function(err) { 
       console.error('ERR', err); 
       // err.status will contain the status code 
     }) 

    }); 


};//end reloadCoordinates 


$interval(reloadCoordinates, 60000); 

reloadCoordinates(); 

}) 

+0

请参阅此[链接](http://forum.ionicframework.com/t/i-found-a-solution-for-some-regular-background-activity/27012)当我使用媒体播放器播放歌曲时,解决了背景活动 –

+0

谢谢Anil,我查了一下,并且看到了背景模式插件工作正常,基于哪个智能手机按钮被按下,例如在我的单页应用程序中:后退按钮 - >退出应用程序;主页按钮 - >应用程序进入后台,图标出现在状态栏中。在这两种情况下,插件显示的消息:应用程序运行在后台,这可以混淆驱动程序时,他们将使用应用程序 – Cristian

+0

好吧,你可以做一件事情,当你想使用地图激活上面的插件代码 –

回答

0

你试图让一个应用程序,做了每x分钟,即使应用程序在后面地面和/或屏幕关闭....尝试背景模式插件,但它只能在手机插入时可靠工作...你有没有找到一个解决方案呢? 使用科尔多瓦命令行实用程序安装插件:

$ cordova plugin add https://github.com/boltex/cordova-plugin-powermanagement.git 

这里是我如何使用它的背景模式插件沿着这样的应用程序是从来没有在后台,并始终作为服务运行...:

if(ionic.Platform.isAndroid()){ 
cordova.plugins.backgroundMode.enable(); 

window.powerManagement.dim(function() { 
    console.log('Wakelock acquired'); 
}, function() { 
    console.log('Failed to acquire wakelock'); 
}); 
window.powerManagement.setReleaseOnPause(false, function() { 
    console.log('setReleaseOnPause successfully'); 
}, function() { 
    console.log('Failed to set'); 
}); 

} 

最后一步,当你完成了你的服务为

cordova.plugins.backgroundMode.disable() 
1

@Cristian停用插件, 启用插件后,您应该调用您的函数或在此函数中编写您的逻辑。

cordova.plugins.backgroundMode.onactivate = function() { 
// your logic here 
// or call any other service, factory function 
}; 
+0

时,我不会附加自己的示例代码,该插件不起作用,我放入其中的任何内容都不会显示出来。 – Japa

2

我知道这是一个古老的线程,但我还是设法得到这个工作,具有:

cordova.plugins.backgroundMode.on('enable', function(){ 
    //your code here, will execute when background tasks is enabled 
    loop(); 
}); 

function loop(){ 
    console.log("loop"); 
    $timeout(loop, 1000); 
} 

cordova.plugins.backgroundMode.enable(); 
+0

也许是一个愚蠢的问题,但你究竟在哪里放这些线,导致我的主引导类(MyApp)根本不会吃它。 (对不起,我是新来的离子) – Iamisti