【问题标题】:To get location of device after specific intervals when phonegap application is running in background through Geolocation API当 phonegap 应用程序通过 Geolocation API 在后台运行时,在特定时间间隔后获取设备的位置
【发布时间】:2018-05-03 12:57:05
【问题描述】:

我在 PhoneGap 中开发了一个应用程序,它通过地理定位 API 跟踪您的行进路线,我通过navigator.geolocation.getCurrentPosition(onSuccess, onError); 获取设备的当前位置,并通过定期间隔通过navigator.geolocation.watchPosition(function(position) 获取位置来更新折线 但现在的问题是它不能在后台运行,即(当我打开另一个应用程序并开始在后台运行时)它没有更新折线意味着没有触发这个navigator.geolocation.watchPosition(function(position) 函数所以我尝试通过Cordova-plugin-background-mode 运行应用程序这个插件开始在后台运行应用程序并且再次没有触发navigator.geolocation.watchPosition(function(position) 函数意味着这不是必需的,即(不需要安装插件以在后台模式下运行应用程序)。所以请帮我解决这个在后台模式下获取位置的问题。如果我使用这个Cordova-plugin-mauron85-background-geolocation 插件,我如何在通过监视位置时获得位置?如果应用程序在前台运行怎么办?我必须使用watchPosition 函数还是其他什么?

【问题讨论】:

    标签: android cordova geolocation


    【解决方案1】:

    有一个带有cordova-plugin-background-mode的示例:

    var backgroundGeoLocation = window.plugins.backgroundGeoLocation;
    
    function startGetLocation() {
    
    var callbackFn = function(location) {
        console.log('[js] BackgroundGeoLocation callback:  ' + location.latitude + ',' + location.longitude);
        var latitude = location.latitude;
        var longitude = location.longitude;
        var pontos = [];
        if($localStorage.getPontosGps() && $localStorage.getPontosGps().pontos){
          pontos = $localStorage.getPontosGps().pontos;
        }
    
    
        $log.log('lat: ' + latitude);
        $log.log('long: ' + longitude);
    
        if (!_.find(pontos, {
            latitude: latitude,
            longitude: longitude
          })) {
    
          pontos.push({
            latitude: latitude,
            longitude: longitude,
            velocidade: null
          });
    
          $localStorage.setPontosGps({
            isRunning: true,
            pontos: pontos
          });
        }
        backgroundGeoLocation.finish();
      };
    
      var failureFn = function(error) {
        console.log('BackgroundGeoLocation error: ' + error);
      };
    
      backgroundGeoLocation.configure(callbackFn, failureFn, {
        desiredAccuracy: 10,
        stationaryRadius: 20,
        distanceFilter: 30,
        debug: false,
        stopOnTerminate: false,
        locationTimeout: 10,
        notificationTitle: 'Title', // <-- android only, customize the title of the notification
        notificationText: 'Collecting geolocation'
      });
    
      backgroundGeoLocation.start();
    
    }
    

    【讨论】:

      【解决方案2】:

      您可能想深入了解这个location plugin。他们似乎认为他们已经解决了问题。

      快速fiddle 和我可以访问的手机上的测试表明这不是phonegap 问题。这是一个操作系统问题。大多数手机都经过优化以暂停后台活动,尤其是网络浏览器活动。最好与原生事件相关联以获得您想要的行为。

      navigator.geolocation.watchPosition( positionChanged, err, options );
      

      我确实注意到,即使是后台任务,手机也会保持所有连接打开。您可以通过对不拒绝但无法响应的服务器进行 ajax 调用来解决这种情况,添加超时处理程序并设置所需的间隔,在 ajax 超时处理程序中检查位置然后设置一个新的电话。

      祝你好运!

      【讨论】:

      • @everyone 让我们知道您是否尝试在后台执行 ajax hack。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多