BackgroundGeolocation不起作用,未定义 [英] BackgroundGeolocation is not working, is not defined

查看:92
本文介绍了BackgroundGeolocation不起作用,未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android
Device manufacturer and model: Samsung Galaxy s7
Cordova version: 8.0.0

        cordova-android-play-services-gradle-release 1.4.2 "cordova-android-play-services-gradle-release"
        cordova-plugin-device 2.0.2 "Device"
        cordova-plugin-facebook4 2.1.0 "Facebook Connect"
        cordova-plugin-geolocation 4.0.1 "Geolocation"
        cordova-plugin-googlemaps 2.3.2 "cordova-plugin-googlemaps"
        cordova-plugin-inappbrowser 3.0.0 "InAppBrowser"
        cordova-plugin-ionic-keyboard 2.1.2 "cordova-plugin-ionic-keyboard"
        cordova-plugin-ionic-webview 1.2.1 "cordova-plugin-ionic-webview"
        cordova-plugin-mauron85-background-geolocation 2.3.5 "CDVBackgroundGeolocation"
        cordova-plugin-request-location-accuracy 2.2.3 "Request Location Accuracy"
        cordova-plugin-splashscreen 5.0.2 "Splashscreen"
        cordova-plugin-whitelist 1.3.3 "Whitelist"
        cordova.plugins.diagnostic 4.0.8 "Diagnostic"

我正在尝试将此插件用于IONIC1,并使用此页面的自述文件"中提供的代码.当我在银河s7上进行编译和测试时,出现此错误:

I am trying to use this plugin for IONIC1 and use the code provided in the "README" of this page. when I compile and tested on my galaxy s7, I am getting this error:

未定义BackgroundGeolocation

BackgroundGeolocation is not defined

我正在使用以下代码:

app.controller('loginController', function($scope,$timeout) {
function onDeviceReady() {
  BackgroundGeolocation.configure({
    locationProvider: BackgroundGeolocation.ACTIVITY_PROVIDER,
    desiredAccuracy: BackgroundGeolocation.HIGH_ACCURACY,
    stationaryRadius: 50,
    distanceFilter: 50,
    notificationTitle: 'Background tracking',
    notificationText: 'enabled',
    debug: true,
    interval: 10000,
    fastestInterval: 5000,
    activitiesInterval: 10000,
    url: 'http://192.168.81.15:3000/location',
    httpHeaders: {
      'X-FOO': 'bar'
    },
    // customize post properties
    postTemplate: {
      lat: '@latitude',
      lon: '@longitude',
      foo: 'bar' // you can also add your own properties
    }
  });

  BackgroundGeolocation.on('location', function(location) {
    // handle your locations here
    // to perform long running operation on iOS
    // you need to create background task
    BackgroundGeolocation.startTask(function(taskKey) {
      // execute long running task
      // eg. ajax post location
      // IMPORTANT: task has to be ended by endTask
      BackgroundGeolocation.endTask(taskKey);
    });
  });

  BackgroundGeolocation.on('stationary', function(stationaryLocation) {
    // handle stationary locations here
  });

  BackgroundGeolocation.on('error', function(error) {
    console.log('[ERROR] BackgroundGeolocation error:', error.code, error.message);
  });

  BackgroundGeolocation.on('start', function() {
    console.log('[INFO] BackgroundGeolocation service has been started');
  });

  BackgroundGeolocation.on('stop', function() {
    console.log('[INFO] BackgroundGeolocation service has been stopped');
  });

  BackgroundGeolocation.on('authorization', function(status) {
    console.log('[INFO] BackgroundGeolocation authorization status: ' + status);
    if (status !== BackgroundGeolocation.AUTHORIZED) {
      // we need to set delay or otherwise alert may not be shown
      setTimeout(function() {
        var showSettings = confirm('App requires location tracking permission. Would you like to open app settings?');
        if (showSetting) {
          return BackgroundGeolocation.showAppSettings();
        }
      }, 1000);
    }
  });

  BackgroundGeolocation.on('background', function() {
    console.log('[INFO] App is in background');
    // you can also reconfigure service (changes will be applied immediately)
    BackgroundGeolocation.configure({ debug: true });
  });

  BackgroundGeolocation.on('foreground', function() {
    console.log('[INFO] App is in foreground');
    BackgroundGeolocation.configure({ debug: false });
  });

  BackgroundGeolocation.checkStatus(function(status) {
    console.log('[INFO] BackgroundGeolocation service is running', status.isRunning);
    console.log('[INFO] BackgroundGeolocation services enabled', status.locationServicesEnabled);
    console.log('[INFO] BackgroundGeolocation auth status: ' + status.authorization);

    // you don't need to check status before start (this is just the example)
    if (!status.isRunning) {
      BackgroundGeolocation.start(); //triggers start on start event
    }
  });

  // you can also just start without checking for status
  // BackgroundGeolocation.start();

  // Don't forget to remove listeners at some point!
  // BackgroundGeolocation.events.forEach(function(event) {
  //   return BackgroundGeolocation.removeAllListeners(event);
  // });
}

document.addEventListener('deviceready', onDeviceReady, false);

});

我想念什么或做错什么了?

What am I missing or what am I doing wrong?

推荐答案

cordova-plugin-mauron85-background-geolocation 2.3.5

cordova-plugin-mauron85-background-geolocation 2.3.5

您正在使用插件版本 2.x 而不是3.0.

You are using plugin version 2.x and not 3.0.

迁移文档到3.0,

backgroundGeolocation对象重命名为BackgroundGeolocation

backgroundGeolocation object renamed to BackgroundGeolocation

您可以将插件版本更新为最新版本.

You can either update the plugin version to the latest one.

ionic cordova plugin rm cordova-plugin-mauron85-background-geolocation
ionic cordova plugin add cordova-plugin-mauron85-background-geolocation

使用

 backgroundGeolocation.configure({...})

我会选择第一个选项,因为迁移更改文档列出了许多重大更改.

I would go with the first option since the migration change docs list many breaking changes.

这篇关于BackgroundGeolocation不起作用,未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆