使用Cordova

时间:2015-09-17 13:46:03

标签: android cordova ionic-framework

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

我可以使用native android命令实现这一点。但我想用cordova实现这个,我无法想办法做到这一点。

如果使用cordova无法完成此任务,我可以使用原生android并注入cordova应用程序吗?? ??

请帮助..

1 个答案:

答案 0 :(得分:0)

您可以使用ng-cordova geolocation观察者执行此操作,它会监视地理位置属性,例如lat,lon和speed。

首先注册ng-cordova并注射

bower install ngCordova

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

然后安装geolocation插件

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();
            });