以前曾问过这个问题,但科尔多瓦却没有。
大家好,我想在用户进入地理围栏区域时发出警报,并且还希望在用户退出地理围栏时发出警报,以便我进行输入。
它应该在所有情况下都可以正常运行,甚至在应用程序被杀死的情况下
当用户进入时我会收到警报,但是当用户从区域中退出时我不会收到警报。
任何帮助将不胜感激。
代码:
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
转换回调函数: 仅当我在区域内时才会被调用,而当我不在区域内时不会被调用
window.geofence.addOrUpdate({
id: "69ca1b88-6fbe-4e80-a4d4-ff4d3748acdb",
latitude: xx.12345,
longitude: xx.12345,
radius: 100,
transitionType:1,
notification: {
id: 1,
title: "Welcome!",
text: "In.",
openAppOnClick: true
}
}, {
id: "69ca1b88-6fbe-4e80-a4d4-ff4d3748acdc",
latitude: xx.12345,
longitude: xx.12345,
radius: 100,
transitionType:2,
notification: {
id: 1,
title: "Bye!",
text: "Out.",
openAppOnClick: true
}
}).then(function () {
navigator.notification.alert('successfully added', function () { });
}, function (reason) {
navigator.notification.alert('failed', function () { });
})
答案 0 :(得分:1)
在使用此插件时:https://github.com/cowbell/cordova-plugin-geofence,并根据您的需要,请注意以下几点:
这是已知的限制。 在后台运行,您的应用可能会/将被暂停以不使用系统资源。 因此,任何javascript代码都将无法运行,只有后台服务才能在后台运行。当用户越过地理围栏区域时,本地通知仍然有效,但是任何自定义javascript代码均无效。如果您想对地理围栏穿越执行自定义操作,请try to write it in native code.
我们可以在插件文档中看到这个示例:
window.geofence.onTransitionReceived = function (geofences) {
geofences.forEach(function (geo) {
console.log('Geofence transition detected', geo);
});
};
如果我们搜索插件代码,就会发现以下内容(www / TransitionType.js):
var TransitionType = {
ENTER: 1,
EXIT: 2,
BOTH: 3,
};
所以您必须检查这项工作:
window.geofence.onTransitionReceived = function (geofences) {
geofences.forEach(function (geo) {
if (geo.TransitionType === 2 ) {
// Do what you want
}
});
};
将您的代码添加到您的主代码后,我注意到了两件事:
首先,文档指定了当您想一次添加多个地理栅栏时,必须从一个数组中添加,因此必须使用多个参数。 可能没什么,但是最好信任文档。
然后,文档还指定
Geofence将覆盖具有相同ID的先前版本。
这正是您要做的事情,这也许就是事件无法正常运行的原因。
如果我正确地遵循了文档,那么您应该具有类似以下内容的东西:
window.geofence.addOrUpdate({
id: "69ca1b88-6fbe-4e80-a4d4-ff4d3748acdb",
latitude: xx.12345,
longitude: xx.12345,
radius: 100,
transitionType: 3, // Both (Enter and Exit)
notification: {
id: 1,
title: "Welcome!",
text: "In.",
openAppOnClick: true
}
}
).then(function () {
navigator.notification.alert('successfully added', function () { });
}, function (error) {
navigator.notification.alert('failed', function () { });
});
window.geofence.onTransitionReceived = function (geofences) {
geofences.forEach(function (geo) {
console.log('Geofence transition detected', geo);
// Do what you want
});
};