我有一个注册iOS后台服务的Titanium应用程序,它每30秒记录一次设备的GPS数据。我已经将它注册为位置服务,它应该可以防止它在10分钟后停止,但它无法正常工作。这是我的tiapp.xml的相关部分:
<ios>
<plist>
<dict>
<key>UISupportedInterfaceOrientations~iphone</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>gps</string>
<string>location-services</string>
</array>
</dict>
</plist>
</ios>
以下是我在alloy.js中注册的方法:
if(utils.ios) {
console.log('registering ios background service');
Ti.App.iOS.registerBackgroundService({ url: 'tracking/backgroundService.js' });
}
后台服务本身:
var timeout = constants.tracking.interval * 1000;
console.log('starting background gps tracking');
setInterval(function() {
var user = settings.user();
if(user && user.password) {
//user is logged in, let's track them.
gpsTracking.track();
}
else {
console.log('user is not logged in so not tracking');
}
}, timeout);
这是在iPhone模拟器上测试过的,我没有在实际的iOS设备上测试过,因为开发者网站仍处于停机状态,因此我无法创建配置文件。
我在build文件夹中检查了我的info.plist,它正确地为UIBackgroundModes和UIRequiredDeviceCapabilities添加了键/数组值,所以我不确定接下来要检查什么。
有什么想法吗?
答案 0 :(得分:0)
请参阅Mr.Chris Bill的回答here。我会为你描述一下。
Here是了解应用与应用互动的重要资源 背景。只有几种不同类型的应用程序 允许在后台运行(并执行代码)额外的时间。 (一世 认为正常限制大约是10分钟。)
在后台播放用户可听内容的应用,例如音乐播放器应用
随时向用户通知其位置的应用,例如 作为导航应用
支持互联网语音协议的应用 (VoIP)的
需要下载和处理新内容的报亭应用
从外部附件接收定期更新的应用
必须事先声明对某些类型的后台执行的支持 使用它们的应用程序。应用程序声明支持使用的服务 它的Info.plist文件。将UIBackgroundModes键添加到Info.plist file并将其值设置为包含一个或多个的数组 以下字符串:
audio:该应用程序向用户播放可听内容 而在后台。 (此内容包括流媒体音频或 使用AirPlay的视频内容。)
位置:该应用可让用户了解相关信息 它们的位置,即使它在后台运行。
voip:该应用为用户提供了使用电话拨打电话的功能 互联网连接。
报亭 - 内容:该应用是一个报亭应用 下载和处理杂志或报纸内容 背景
external-accessory-该应用程序适用于硬件配件 需要通过以下方式定期提供更新 外部附件框架。 bluetooth-central-该应用程序适用于 需要定期更新的蓝牙配件 通过CoreBluetooth框架安排。
因此,从构建文件夹中获取info.plist文件并将其放入项目的根目录中。 然后如上所述进行编辑。希望这有帮助!
答案 1 :(得分:0)
我面临同样的问题,似乎钛有GPS位置的缓存逻辑,并且无法获得实际的纬度和经度。也遇到像你这样的问题,它停止了10分钟,如果我初始化系统iOS地图成功获取位置,回到钛金属应用程序,它再次工作。很有线。 经过长时间的调查和尝试。
最后通过将准确度设置为ACCURACY_NEAREST_TEN_METERS并使用位置事件来解决问题。现在我可以不断获得GPS更新,准确度也非常好,5米。
Titanium.Geolocation.setAccuracy(ACCURACY_SET);
Ti.Geolocation.addEventListener('location',evtGpsResult);
希望它可以解决您的问题。