navigator.geolocation.getCurrentPosition() when sc

2019-02-25 22:57发布

问题:

I have an App which constantly polls for location when its in travelling mode. My issue is that once the screen is locked, the App can no longer access the geolocation from the phone.

I have managed to find this plugin but it requires I purchase it for the capability to work in Android. http://shop.transistorsoft.com/pages/cordova-background-geolocation-premium

Does anyone know if there is a free option that i can use to get location to successfully poll in an Ionic / Cordova application while the screen is locked?

回答1:

Another option is to use a partial wakelock on Android to keep your app alive while in the background (screen off or switched out of foreground). You'd need to do this via a plugin, but it would have the same effect as a background service, keeping you app alive to receive location updates while in the background.

See my old answer here for the source code for a Cordova 2.0 plugin (it will need updating for Cordova 3+).



回答2:

Have you looked at NG-Cordova?

first add ng-cordova to your project:

bower install ngCordova

or

<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>

Then inject it:

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

Here is a plugin you could try: http://ngcordova.com/docs/plugins/backgroundGeolocation/

just install the plugin:

cordova plugin add https://github.com/christocracy/cordova-plugin-background-geolocation.git

then bind it to a controller:

module.controller('MyCtrl', function($scope, $cordovaBackgroundGeolocation) {



    var options = {
        // https://github.com/christocracy/cordova-plugin-background-geolocation#config
      };

      document.addEventListener("deviceready", function () {

        // `configure` calls `start` internally
        $cordovaBackgroundGeolocation.configure(options)
        .then(
          null, // Background never resolves
          function (err) { // error callback
            console.error(err);
          },
          function (location) { // notify callback
            console.log(location);
          });


        $scope.stopBackgroundGeolocation = function () {
          $cordovaBackgroundGeolocation.stop();
        };

      }, false);
    });