2015-09-17 23 views
0

我想检查位置并将所需数据存储在移动设备的内部存储器中。要停止此任务,请使用主UI中的停止按钮。当这项任务开始时,无论应用程序的状态如何,该任务都应该完成其工作。使用Cordova的位置服务

我可以使用原生android命令来实现这一点。但我想实现这个使用科尔多瓦,我想不出一种方法来做到这一点..

如果这项任务不能使用科尔多瓦完成,我可以使用原生android并注入到cordova应用程序.. ??

请帮助..

回答

0

您可以使用ng-cordova geolocation守望做到这一点,手表地理位置属性,如纬度,经度和速度。

第一intall NG-科尔多瓦和它注入

bower install ngCordova 

angular.module('myApp', ['ngCordova']) 

然后安装地理位置插件

cordova plugin add org.apache.cordova.geolocation 

那么你想创建一个观察者,确保设备就绪事件之后触发,或它会引起问题

这就是设备就绪功能看起来像

document.addEventListener("deviceready", function() { 
    $cordovaPlugin.someFunction().then(success, error); 
}, false); 

这里是观察者控制器:

module.controller('GeoCtrl', function($cordovaGeolocation) { 


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

    var watch = $cordovaGeolocation.watchPosition(watchOptions); 
    watch.then(
    null, 
    function(err) { 
     // error 
    }, 
    function(position) { 
     var lat = position.coords.latitude 
     var long = position.coords.longitude 
    }); 


    watch.clearWatch(); 
    // OR 
    $cordovaGeolocation.clearWatch(watch) 
    .then(function(result) { 
     // success 
     }, function (error) { 
     // error 
    }); 
}); 

当你看着自己的地理位置信息,你可以把它变成一个本地数据库像http://pouchdb.com/或沙发数据库或服务器数据库。如果你想在应用程序中的任何状态下使用这个你可以把它变成一个服务, 这里是一个程序,我建

service.watchSpeed = function() { 
     console.log('watcher'); 
     ionic.Platform.ready(function() { 
      var watchOptions = { 
       frequency: 15 * 60 * 1000, 
       timeout: 1 * 60 * 1000, 
       enableHighAccuracy: true // may cause errors if true 
      }; 

      service.watch = $cordovaGeolocation.watchPosition(watchOptions); 
      service.watch.then(
       null, 
       function (err) { 
        service.watchSpeed(); 
       }, 
       function (position) { 
        if (service.maxspeed.ToUseApp !== 0) { 
         var lat = position.coords.latitude; 
         var long = position.coords.longitude; 
         var speed = position.coords.speed; 
         service.speed = speed; 
         if (speed > service.maxspeed.ToUseApp) { 
          $state.go('overspeed'); 
         } 
         if ($ionicHistory.currentStateName() === 'overspeed' && speed < service.maxspeed.ToUseApp) { 
          $ionicHistory.goBack(); 
         } 
        } else { 
         console.log('speed watcher has been killed, why master??'); 
        } 
       }); 
     }); 
    }; 

然后在我的家乡控制器我所说的守望

ionic.Platform.ready(function() { 
       ffService.getMaxSpeed(); 
      }); 
为例
+0

有没有办法检查这项服务是否已经开始..? –

+0

是的,看看我的控制台日志(观察者)在哪里告诉你Geowatcher何时开始。 –

+0

我有这样的问题。用户启动此服务并关闭应用程序而不停止服务。之后,用户再次打开该应用程序并尝试再次启动服务。然后我必须通知用户这项服务已经陈述了。我该怎么做这样的事情? 我对科尔多瓦很新,请帮忙.. –