- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Titan 创建一个适用于 Android 和 iOS 的应用程序,只要服务器运行,它就会每 5 秒向服务器发送一个新的地理位置。然而,在 iOS 上,应用程序会在随机间隔后停止发送这些位置。虽然我自己并不完全相信这是由于应用程序在 iOS 中暂停(因为它随机停止而不是在固定时间),但我仍然渴望尝试并确定。
但是;我真的不知道该怎么做。我在 eventListener 中创建了一个后台服务来查看发生了什么,它立即开始记录(我现在已经在其中放入了控制台日志)。尽管如此,我的地理位置仍然正常。
现在,有人可以给我一些关于如何解决这个问题的指示吗?我是否想停止正常的地理定位监听器并让 BG 服务接管?或者 BGservice 是否让我的正常代码中的地理位置事件监听器现在保持事件状态?
此时我不敢说我非常渴望获得任何帮助,哈哈!
这是我现在的地理位置处理以及 BGservice:
//Start button. listens to an eventHandler in location.js
btnStart.addEventListener('click', function (e) {
if( Titanium.Geolocation.locationServicesEnabled === false ) {
GPSSaved.text = 'Your device has GPS turned off. Please turn it on.';
} else {
if (Titanium.Network.online) {
GPSSaved.text = "GPS zoeken...";
//Empty interval and text to make a clean (re)start
clearInterval(interval);
//Set a half second timer on the stop button appearing(So people can't double tap the buttons)
stopTimeout = setTimeout(showStopButton, 1000);
//Switch the textlabels and buttons from startview to stopview
stopText.show();
startText.hide();
btnStart.hide();
//Locationhandler
location.start({
action: function (e) {
//Ti.API.info(e.coords.longitude);
if (e.coords) {
//If the newly acquired location is not the same as the last acquired it is allowed
if (e.coords.longitude != lastLon && e.coords.latitude != lastLat) {
//set the last acquired locations+other info to their variables so they can be checked(and used)
lastLat = e.coords.latitude;
lastLon = e.coords.longitude;
lastKnownAltitude = e.coords.altitude;
lastKnownHeading = e.coords.heading;
lastKnownSpeed = e.coords.speed;
if (lastLat != 0 && lastLon != 0) {
setGPSholder(lastLat, lastLon, lastKnownAltitude, lastKnownHeading, lastKnownSpeed);
} else {
GPSSaved.text = 'Geen coordinaten.';
}
}
}
}
});
/*
A second interval which shows a counter to the user and makes sure a location is sent
roughly every 5 seconds(setInterval isn't accurate though)
A lot of counters are tracked for several reasons:
minuteInterval: Counter which makes sure the last location is sent after a minute if no new one is found in the meantime
secondsLastSent: The visual counter showing the user how long its been for the last save(Is reset to 0 after a succesful save)
*/
interval = setInterval(function () {
minuteInterval++;
minuteIntervalTest++;
secondsLastSent++;
counterBlock.text = "De laatste locatie is " + secondsLastSent + " seconden geleden verstuurd";
//If the counter is higher than 5 send a new coordinate. If at the same time the minuteInterval is over a minute
//The last location is put in the array before calling the sendCoordinates
if (counter >= 5) {
if (minuteInterval > 60) {
if (lastLat != 0 && lastLon != 0) {
setGPSholder(lastLat, lastLon, lastKnownAltitude, lastKnownHeading, lastKnownSpeed);
}
}
counter = 0;
sendCoordinates();
Ti.API.info(1);
} else {
counter++;
}
if (minuteIntervalTest > 60) {
sendTestRequest();
}
}, 1000);
if (Titanium.Platform.osname == 'iphone' || Titanium.Platform.osname == 'ipad') {
//var service = Ti.App.iOS.registerBackgroundService({url:'send_geolocation_service.js'});
var service;
// Ti.App.iOS.addEventListener('notification',function(e){
// You can use this event to pick up the info of the noticiation.
// Also to collect the 'userInfo' property data if any was set
// Ti.API.info("local notification received: "+JSON.stringify(e));
// });
// fired when an app resumes from suspension
Ti.App.addEventListener('resume',function(e){
Ti.API.info("app is resuming from the background");
});
Ti.App.addEventListener('resumed',function(e){
Ti.API.info("app has resumed from the background");
// this will unregister the service if the user just opened the app
// is: not via the notification 'OK' button..
if(service!=null){
service.stop();
service.unregister();
}
Titanium.UI.iPhone.appBadge = null;
});
Ti.App.addEventListener('pause',function(e){
Ti.API.info("app was paused from the foreground");
service = Ti.App.iOS.registerBackgroundService({url:'send_geolocation_service.js'});
Ti.API.info("registered background service = "+service);
});
}
} else {
stopGPS();
GPSSaved.text = "Geen internetverbinding.";
}
}
});
正如您所看到的,有一些计数器按一定时间间隔运行,以决定是否应每 5 秒或每分钟发送一次地理位置(如果自上次发现以来没有新位置)
tl;dr: 我希望每 5 秒发送一次地理位置信息,但不知何故,iOS(iPhone 4s 和 5 已测试)在随机时间段后停止发送,并在我取出手机后重新开始发送待机。
最佳答案
实际上后台服务有一个限制,即在 10 分钟后停止,因此如果您想在设备处于后台模式时捕获位置,则需要在 tiapp.xml 文件中设置模式标记。
只需引用此在线文档即可了解其工作原理。 http://docs.appcelerator.com/titanium/3.0/#!/guide/tiapp.xml_and_timodule.xml_Reference-section-29004921_tiapp.xmlandtimodule.xmlReference-LegacyiPhonesection
关于javascript - 在后台服务中发送地理定位[钛],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230826/
我启动了一个使用sqlite db的Titanium应用程序。我得到奇怪的数据库结果,所以只想使用FF SQLite Manager浏览数据库,但是我不确定数据库在哪里? 这是创建数据库(部分)的代码
我正在使用Titanium SDK的openCamera函数来捕获图像并将其存储到sdcard。 function captureImage() { var capturedImg;
如何在应用程序的全屏播放视频中显示youtube或位?我必须导航到一个特殊链接吗?还是有专门的API可以全屏查看它? 想法是单击“显示视频”链接,然后全屏显示视频,并获得按钮播放纱布并“完成”。单击完
抱歉,如果它看起来像个菜鸟问题,但我是钛的新手,所以有些概念对我来说很陌生。 我有一个名为entry.js的脚本,该脚本是使用require('entry.js')从details.js调用的。 现在
在 appcelerator titanium 中,是否可以在函数调用中设置事件监听器? 有点像 var coolManDool = function(){...}; coolManDool.addE
我使用forwardGeocoder 获取纬度值,并将获得的纬度值与十进制数相加。看看下面的代码。 Ti.Geolocation.forwardGeocoder(textField.value, fu
在我看来,这个问题更接近commonJs,而不是titanium。我编写了一个大文件。相当丑陋(代码的第一次和平)。如果你愿意的话,你可以跳过它。 问题:我的代码中有 2 个 View ,我想将它们放
在 appcelerator titanium 中,是否可以在函数调用中设置事件监听器? 有点像 var coolManDool = function(){...}; coolManDool.addE
我已经为我的应用程序实现了后台服务。我正在使用它来通过使用位置服务来获取用户的当前位置。 我将解释实现此方法的方式-“XYZ.js”-显示用户距离的屏幕。添加了以下代码以设置注册后台服务- var i
我已经设置了相关的证书和应用程序,但是当我为iTunes构建它时,它将始终构建该应用程序的开发版本。我试图通过执行以下操作来更改证书: Titanium iOS设备->管理配置,但无法选择我的生产证书
是否可以在窗口加载后立即显示警报? 我有一个创建窗口语句,然后是一条警告消息,然后返回。 function NewView() { var self = Ti.UI.createWindow(
我想知道是否有一个功能可以在用户退出应用程序时保存上次查看的窗口,这样当他们再次进入应用程序时,它会转到上次查看的页面,而不是重新启动。我看过 Ti.App.Properties,但还没有真正找到我要
我可以在单个 Controller 文件中做到这一点: Ti.Network.addEventListener('change', function(e) { networkIsOnline
我是 Titanium Studio 的初学者。选择按钮时我可以隐藏键盘。它有效, okBtn.addEventListener("click", function(e) { textField.bl
我正在使用 Titan 创建一个适用于 Android 和 iOS 的应用程序,只要服务器运行,它就会每 5 秒向服务器发送一个新的地理位置。然而,在 iOS 上,应用程序会在随机间隔后停止发送这些位
我在 ScrollView 中有两个 View ,它们是使用垂直布局属性放置的。我尝试了多种组合,但两种 View 之间总是存在巨大差距。 var view = Titanium.UI.createS
我可以将其关闭。 代码: //get current Location // Titanium.Geolocation.accuracy = Titanium.Geolocation.ACCURACY
如何在 XML 中制作网格布局。例如说我想要一个 4x4 板。我只需要制作 16 个按钮并使用 jss 格式化它们吗?例如,这就是我所拥有的,但还不是板格式。 square
这是我第一次为 iPhone 开发钛金属模块。我正在为 iPhone 构建 Google Analytics 模块。 如果我要使用 XCode 实现 Google Analytics,我可以使用 di
有没有一种方法可以用 javascript(使用 titanium)计算 PDF 页数?我正在开发一个应用程序,我需要页面数量才能知道用户在哪个页面上。现在我正在对大量页面进行硬编码,但我想通过 ja
我是一名优秀的程序员,十分优秀!