背景地理定位离子3不更新

Posted

技术标签:

【中文标题】背景地理定位离子3不更新【英文标题】:background geolocation ionic 3 not updating 【发布时间】:2018-05-03 07:29:19 【问题描述】:

ionic 的后台地理定位插件未更新。我想要的功能是每 30 秒向插件询问 lat lng 值(如果可用)。问题是,它最初只给我值,然后背景停止。前景很好,真的是背景。基本上我无法在后台第一次初始发送后发送请求。

gps.ts

startTracking() 
  console.log("started tracking");
  const config: BackgroundGeolocationConfig = 
    desiredAccuracy: 10,
    stationaryRadius: 20,
    distanceFilter: 30,
    debug: false, //  enable this hear sounds for background-geolocation life-cycle.
    stopOnTerminate: false
  ;

  this.backgroundGeolocation
    .configure(config)
    .subscribe((location: BackgroundGeolocationResponse) => 
      this.zone.run(() => 
        this.lat = location.latitude;
        this.lng = location.longitude;
        this.bearing = location.bearing;
        this.speed = location.speed;
        this.accuracy = location.accuracy;
        this.timestamp = location.time;
      );

      this.backgroundGeolocation.finish(); // FOR ios ONLY
      this.backgroundGeolocation.stop();
    );

  this.backgroundGeolocation.start();


sendGPS() 
  this.optionsService.sendGPS(gpsData).subscribe(result => );


stopTracking() 
  this.sendGPS();

app.component.ts

constructor() 
  this.sendGPSStart();
  this.interval();


sendGPSStart() 
  this.locationTracker.startTracking();


sendGPSStop() 
  this.locationTracker.stopTracking();


interval() 
  setInterval(() => 
    this.sendGPSStart();
    this.sendGPSStop();
  , "30000");

【问题讨论】:

【参考方案1】:

我正在使用该插件,经过一些阅读后,我相信这种行为

首先你需要删除该行

this.backgroundGeolocation.stop()

来自代码。

由于 IOS(和 android)的限制,第二个后台地理定位插件不会在我们想要的时候执行,但只有在“天线已更改事件发生”时才会执行因此,您不仅需要真正移动,因为您需要连接和断开连接载波天线,尝试应用我所说的这些更改,打开调试,然后去开车测试

【讨论】:

【参考方案2】:

在您的配置中,您必须确定以毫秒为单位的时间间隔。

const config: BackgroundGeolocationConfig = 
  desiredAccuracy: 10,
  stationaryRadius: 20,
  distanceFilter: 30,
  debug: false, //  enable this hear sounds for background-geolocation life-cycle.
  stopOnTerminate: false,
  interval: 2000 // <= example 2 seconds interval
;

然后在订阅部分做一个ajax调用

    this.backgroundGeolocation.on(BackgroundGeolocationEvents.location).subscribe((location: BackgroundGeolocationResponse) => 
          console.log(location);

          this.postData = 
            user_id: this.userId,
            latitude: location.latitude,
            longitude: location.longitude,
          ;

          console.log(location);

          this.http.post<ActivationResponse>(environment.crmUrl + '/api/start-job', this.postData,
             headers: new HttpHeaders( Authorization: this.token ), observe: 'response' )
            .subscribe(async (response: HttpResponse<ActivationResponse>) => 

              console.log(response);
              this.backgroundGeolocation.finish(); // FOR IOS ONLY

            , async (errorResponse: HttpErrorResponse) => 

              console.log(errorResponse);

            );
);

它会每 2 秒自动向您确定的服务器发送新的 gps 位置。

【讨论】:

【参考方案3】:

查看示例,例如dnchia/Ionic3-Background-Geolocation,您将在后台配置间隔,以及定期前台发送

gps.ts

startTracking(interval) 

    console.log('started tracking')
    const config: BackgroundGeolocationConfig = 
      desiredAccuracy: 10,
      stationaryRadius: 20,
      distanceFilter: 30,
      debug: false, //  enable this hear sounds for background-geolocation life-cycle.
      stopOnTerminate: false,
      interval: interval
    ;

app.component.ts

interval = 30000;

constructor() 
  this.sendGPSStart()
  this.interval()


sendGPSStart()
  this.locationTracker.startTracking(this.interval);


sendGPSStop()
  this.locationTracker.stopTracking();


interval() 
  setInterval(() => 
    this.locationTracker.sendGPS();
  , this.interval)


【讨论】:

【参考方案4】:

目前在项目 github 上有关于此的错误报告:

见: https://github.com/transistorsoft/cordova-background-geolocation-lt/issues/548 和 https://github.com/transistorsoft/cordova-background-geolocation-lt/issues/539

项目创建者建议移除闪屏插件(cordova-plugin-splashscreen)

【讨论】:

【参考方案5】:

当 postTemplate 为 jsonObject 且数组为 jsonArray 时,所有位置(甚至是单个位置)都将作为对象数组发送!

在服务器端,我将 JSON 对象更改为对象数组。

例如,


  "user_id": "1",
  "lon": "13.2",
  "lat": "82.3"

我把上面的 JSON 对象改成下面的

[
  "user_id": "1",
  "lon": "13.2",
  "lat": "82.3"
]

【讨论】:

以上是关于背景地理定位离子3不更新的主要内容,如果未能解决你的问题,请参考以下文章

原生离子地理定位有时不起作用

离子地理定位,iOS 上没有权限

离子地理定位总是陷入错误方法

本地地理定位离子手表位置在后台工作,但在手机锁定时不工作

地理定位离子在浏览器测试中工作但不在android上

具有离子框架的 ngCordova 地理定位