背景地理定位离子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不更新的主要内容,如果未能解决你的问题,请参考以下文章