我在IOS中使用加速计,我希望它在后台模式下运行。
我试图像这样使用CMMotionManager
,但它不起作用:
CMMotionManager*manager= [[CMMotionManager alloc] init];
if(!manager.accelerometerAvailable) {
NSLog(@"Accelerometer not available");
} else {
manager.accelerometerUpdateInterval = 0.1;
NSOperationQueue *motionQueue = [[NSOperationQueue alloc] init];
[manager startAccelerometerUpdatesToQueue: motionQueue withHandler:
^(CMAccelerometerData *data, NSError *error) {
NSLog(@"Accelerometer data: %@", [data description]);
}
];
}
我该怎么做?
答案 0 :(得分:1)
不确定这会解决您的问题,但只需浏览文档(http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html)即可:
"实施长期运行的后台任务
对于需要更多执行时间来实现的任务,您必须请求特定权限才能在后台运行它们而不会被暂停。在iOS中,只允许特定的应用类型在后台运行:
在后台播放用户可听内容的应用,例如音乐播放器应用
随时向用户通知其位置信息的应用,例如导航应用
支持互联网协议语音(VoIP)的应用
需要下载和处理新内容的报亭应用
从外部附件接收定期更新的应用
实施这些服务的应用必须声明其支持的服务,并使用系统框架来实现这些服务的相关方面。声明服务可以让系统知道您使用的服务,但在某些情况下,系统框架实际上会阻止您的应用程序被暂停。"
不确定您是否尝试使用加速计做任何这些事情(或许与蓝牙设备通信?),但如果是这样,您需要声明您支持的服务该应用程序。为此,您需要将UIBackgroundModes键添加到Info.plist中,然后添加一个包含您尝试使用的服务的相关字符串的数组。有关字符串的完整列表,请参阅上面链接的文档页面。
如果您 虽然我喜欢那里的错...(任何人?)