Ibm mobilefirst Worklight Geofence错误动态不更新触发器
在worklight中实现地理围栏。第一次触发geofence时,它工作正常。在用户离开该区域后,我尝试再次更新触发器和startAcquisition,但在这种情况下,时间触发器不会被触发Ibm mobilefirst Worklight Geofence错误动态不更新触发器,ibm-mobilefirst,geofencing,Ibm Mobilefirst,Geofencing,在worklight中实现地理围栏。第一次触发geofence时,它工作正常。在用户离开该区域后,我尝试再次更新触发器和startAcquisition,但在这种情况下,时间触发器不会被触发 //display the position to the user function displayPosition(pos) { $('#longitude').html('<b>Longitude:</b> ' + pos.coords.longitude);
//display the position to the user
function displayPosition(pos) {
$('#longitude').html('<b>Longitude:</b> ' + pos.coords.longitude);
$('#latitude').html('<b>Latitude:</b> ' + pos.coords.latitude);
$('#timestamp').html('<b>Timestamp:</b> ' + new Date(pos.timestamp));
}
function alertOnGeoAcquisitionErr(geoErr) {
alert('Error acquiring geolocation (' + geoErr.code + '): ' + geoErr.message);
}
var triggers={};
var geoPolicy = WL.Device.Geo.Profiles.LiveTracking();
geoPolicy.timeout = 60000; // set timeout to 1 minute
geoPolicy.maximumAge = 10000; // allow to use a position that is 10 seconds old
function getFirstPositionAndTrack() {
alert('Click OK to proceed to acquire starting position');
// use GPS to get the user's location
// note: to see at high-accuracy, change RoughTracking above to LiveTracking
// get the user's current position
WL.Device.Geo.acquirePosition(
function(pos) {
displayPosition(pos);
triggers = generaTriggers(pos);
startTrace({ Geo: geoPolicy },triggers,{ Geo: alertOnGeoAcquisitionErr })
},
function(geoErr) {
alertOnGeoAcquisitionErr(geoErr);
// try again:
getFirstPositionAndTrack();
},
geoPolicy
);
}
function onConnectSuccess(){
// start up acquisition process
getFirstPositionAndTrack();
}
function onConnectFailure(){
getFirstPositionAndTrack();
}
function wlCommonInit(){
// Common initialization code goes here
WL.Client.connect({
onSuccess: onConnectSuccess,
onFailure: onConnectFailure
});
// keep running while in background on Android; will show a notification
WL.App.setKeepAliveInBackground(true);
}
function generaTriggers(pos){
var triggers = {
Geo: {
posChange: { // display all movement
type: "PositionChange",
callback: function(deviceContext) {
displayPosition(deviceContext.Geo);
}
},
leftArea: { // alert when we have left the area
type: "Exit",
circle: {
longitude: pos.coords.longitude,
latitude: pos.coords.latitude,
radius: 200
},
callback: function(deviceContext) {
alert('Left the area');
//resetTriggers(deviceContext.Geo);
startTrace({ Geo: geoPolicy },resetTriggers(deviceContext.Geo),{ Geo: alertOnGeoAcquisitionErr });
//WL.Client.transmitEvent({ event: 'exit area'}, true);
}
},
dwellArea: { // alert when we have stayed in the vicinity for 3 seconds
type: "DwellInside",
circle: {
longitude: pos.coords.longitude,
latitude: pos.coords.latitude,
radius: 50
},
dwellingTime: 3000,
callback: function() {
alert('Still in the vicinity');
//WL.Client.transmitEvent({ event: 'dwell inside area'}, true);
}
}
}
};
return triggers;
}
function resetTriggers(deviceContext){
//alert();
return generaTriggers(deviceContext);
}
function startTrace(policy, trigger, geoerr){
alert("trace");
WL.Device.startAcquisition(policy, trigger, geoerr );
}
//向用户显示位置
功能显示位置(pos){
$('#longitude').html('longitude:'+pos.coords.longitude);
$('#latitude').html('latitude:'+pos.coords.latitude);
$('timestamp').html('timestamp:'+新日期(pos.timestamp));
}
函数AlertOnGeoAcquisitioner(geoErr){
警报('获取地理位置时出错('+georer.code+'):'+georer.message);
}
var触发器={};
var geoPolicy=WL.Device.Geo.Profiles.LiveTracking();
geoPolicy.timeout=60000;//将超时设置为1分钟
geoPolicy.maximumAge=10000;//允许使用10秒前的位置
函数getFirstPositionAndTrack(){
警报(“单击确定继续获取起始位置”);
//使用GPS获取用户的位置
//注意:要以高精度查看,请将上面的“粗略跟踪”更改为“实时跟踪”
//获取用户的当前位置
WL.Device.Geo.acquirePosition(
功能(pos){
显示位置(pos);
触发器=发电机(pos);
startTrace({Geo:geoPolicy},触发器,{Geo:AlertOnGeoAcquisitioner})
},
功能(geoErr){
AlertonGeoAcquisitioner(geoErr);
//请重试:
getFirstPositionAndTrack();
},
地缘政治
);
}
函数onConnectSuccess(){
//启动采购流程
getFirstPositionAndTrack();
}
函数onConnectFailure(){
getFirstPositionAndTrack();
}
函数wlCommonInit(){
//通用初始化代码在这里
WL.Client.connect({
onSuccess:OnConnect成功,
onFailure:onConnectFailure
});
//在Android上后台运行时保持运行;将显示通知
WL.App.setKeepAliveInBackground(真);
}
函数生成器(pos){
变量触发器={
地理:{
posChange:{//显示所有移动
类型:“职位变更”,
回调:函数(deviceContext){
显示位置(deviceContext.Geo);
}
},
leftArea:{//当我们离开该区域时发出警报
键入:“退出”,
圆圈:{
经度:位置坐标经度,
纬度:位置坐标纬度,
半径:200
},
回调:函数(deviceContext){
警报(“离开该区域”);
//重置触发器(deviceContext.Geo);
startTrace({Geo:geoPolicy},resetTriggers(deviceContext.Geo),{Geo:AlertOnGeoAcquisitioner});
//transmitEvent({event:'exit area'},true);
}
},
居住区:{//当我们在附近停留3秒后,请保持警惕
类型:“住宅内部”,
圆圈:{
经度:位置坐标经度,
纬度:位置坐标纬度,
半径:50
},
居住时间:3000,
回调:函数(){
警报(“仍在附近”);
//transmitEvent({event:'驻留在区域内'},true);
}
}
}
};
返回触发器;
}
函数重置触发器(deviceContext){
//警惕();
返回生成器(deviceContext);
}
函数startTrace(策略、触发器、geoerr){
警报(“跟踪”);
WL.Device.startAcquisition(策略、触发器、geoerr);
}
在调用startAcquisition之间保持每个触发器的状态;它依赖于触发器名称来标识唯一的配置,而不是检查底层配置是否不同
一般来说,你有两个选择