在Cordova中触发地理围栏退出通知时如何获得警报

时间:2019-03-05 08:16:34

标签: android cordova cordova-plugins visual-studio-cordova geofencing

以前曾问过这个问题,但科尔多瓦却没有。

大家好,我想在用户进入地理围栏区域时发出警报,并且还希望在用户退出地理围栏时发出警报,以便我进行输入。

它应该在所有情况下都可以正常运行,甚至在应用程序被杀死的情况下

当用户进入时我会收到警报,但是当用户从区域中退出时我不会收到警报。

任何帮助将不胜感激。

代码:

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 () { });    
    })

1 个答案:

答案 0 :(得分:1)

在使用此插件时:https://github.com/cowbell/cordova-plugin-geofence,并根据您的需要,请注意以下几点:

JavaScript后台执行

这是已知的限制。 在后台运行,您的应用可能会/将被暂停以不使用系统资源。 因此,任何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
        }
    });
};

编辑1

将您的代码添加到您的主代码后,我注意到了两件事:

首先,文档指定了当您想一次添加多个地理栅栏时,必须从一个数组中添加,因此必须使用多个参数。 可能没什么,但是最好信任文档。

然后,文档还指定

  

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
    });
};