当应用程序进入后台IOS时,保持加速计运行



我在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]);
}
];
}

我该怎么做?

不确定这是否能解决您的问题,但请查看文档(http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html)说:

"实施长期运行的后台任务

对于需要更多执行时间才能实现的任务,您必须请求特定的权限才能在后台运行它们,而不会挂起它们。在iOS中,只有特定的应用程序类型才允许在后台运行:

  1. 在后台向用户播放音频内容的应用程序,如音乐播放器应用程序

  2. 让用户随时了解自己位置的应用程序,如导航应用程序

  3. 支持互联网语音协议(VoIP)的应用程序

  4. 需要下载和处理新内容的报摊应用程序

  5. 从外部配件接收定期更新的应用程序

实现这些服务的应用程序必须声明其支持的服务,并使用系统框架来实现这些服务中的相关方面。声明服务可以让系统知道你使用了哪些服务,但在某些情况下,实际上是系统框架阻止了你的应用程序被挂起。">

不确定你是否试图使用加速度计来做这些事情(也许是与蓝牙设备通信?),但如果是,你需要在应用程序中声明你支持的服务。要做到这一点,您需要将UIBackgroundModes键添加到Info.plist中,然后添加一个数组,其中包含您尝试使用的服务的相关字符串。有关字符串的完整列表,请参阅上面链接的文档页面。

如果你而不是试图使用加速度计做任何这些事情,看起来你可能运气不好。尽管我很乐意在那里犯错。。(有人吗?)

最新更新