如何让 wl.device.geo.acquireposition 在后台运行
Posted
技术标签:
【中文标题】如何让 wl.device.geo.acquireposition 在后台运行【英文标题】:how to make wl.device.geo.acquireposition run in background 【发布时间】:2015-12-11 12:51:07 【问题描述】:我正在开发一个适用于 android 和 iPhone 的 worklight(现在是 mobileFirst)应用程序。问题之一是我需要在某些点找到用户,以便通过本地推送通知通知他/她。当应用程序在前台时,一切似乎都可以正常工作,但我也需要它在后台工作。
我已经检查了以下链接以及其他链接,但对我没有任何帮助:
https://www-01.ibm.com/support/knowledgecenter/SSHS8R_7.1.0/com.ibm.worklight.dev.doc/devref/t_keeping_app_running_in_background.html https://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.0.0/com.ibm.worklight.help.doc/apiref/r_wl_location_geoAcquirePosition.html如果有帮助,这是我的代码:
function getFirstPositionAndTrack()
// use GPS to get the user's location
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
// note: to see at high-accuracy, change RoughTracking above to LiveTracking
// get the user's current position
WL.Device.Geo.acquirePosition(
function(pos)
// when we receive the position, we display it and start on-going acquisition
WL.Logger.debug("acquired position");
WL.Logger.debug("Longitude: " + pos.coords.longitude);
WL.Logger.debug("Latitude: " + pos.coords.latitude);
var triggers = new Object();
triggers.Geo = ;
var trigger_events = generateTrigger();
triggers.Geo = trigger_events;
WL.Device.startAcquisition( Geo: geoPolicy , triggers, Geo: alertOnGeoAcquisitionErr );
,
function(geoErr)
alertOnGeoAcquisitionErr(geoErr);
,
geoPolicy
);
//Method that create triggers dinamically
function generateTrigger()
var trigger_events = new Object();
angular.forEach(json.locations, function(location)
var trigger =
type: "DwellInside",
circle:
longitude: location.longitude,
latitude: location.latitude,
radius: 100
,
dwellingTime: 3000,
callback: function()
// WL.Logger.info("Enter branch");
// WL.Client.transmitEvent( branch: "enter branch", true);
console.log("Location: "+JSON.stringify(location));
alert("We are in: "+location.name);
;
trigger_events["dwellArea_"+location.name] = trigger;
);
return trigger_events;
我实际上是在 ios 上尝试,我的 info.plist 文件如下所示:
我在后台得到的什么都没有,但是当我回到前台时,我似乎一下子得到了所有东西。所以,看起来它确实做了一些事情,但直到你回到前台才让你知道......有没有办法让工作灯进程在后台保持活动状态?
任何帮助将不胜感激,在此先感谢!
【问题讨论】:
【参考方案1】:因此,如果我正确理解了这个问题,您正在尝试发出“本地通知”,但在提供的代码中没有显示您是如何尝试这样做的?
无论如何,本地通知只能通过 Cordova 插件实现。见这里:
How can i create local Notification in worklight Using katzer local notification in IBM Worklight【讨论】:
嗨,我想做的是:1)在前台和后台定位用户 2)发送本地通知但是,我说这是为了做出完整的解释。正如我在问题末尾提到的那样,我的问题是我无法让我的应用在后台模式下定位用户。 您确定您的本地通知设置正确吗?或许可以查看***.com/questions/16811466/… 以验证您的通知是否在没有位置数据的情况下正常工作。听起来确实至少正在收集位置数据(“我好像一下子得到了所有东西”)。 嗨,为了清楚起见,我的问题不是本地通知,而是应用程序进入后台的时候。 @ user2674117,是的,似乎数据是在后台收集的,但问题是我“不知道”,直到我再次进入前台......我需要知道位置数据正在在后台收集以通知用户。再一次,您知道如何在后台运行工作灯流程吗?谢谢 一般情况下,一旦您设置了位置后台键,工作灯代码将在接收位置更新时在后台运行。例如,您应该能够在后台模式下向服务器发送事件。这是推测,但可能是您执行本地通知的方式正在跨越线程边界,因此其他线程没有在后台执行。 是的......它应该,但它不是! :(以上是关于如何让 wl.device.geo.acquireposition 在后台运行的主要内容,如果未能解决你的问题,请参考以下文章