我在
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中,只允许在后台运行特定的应用类型:
>在后台播放用户可听内容的应用,例如音乐播放器应用
>随时向用户通知其位置信息的应用程序,例如导航应用程序
>支持互联网协议语音(VoIP)的应用
>需要下载和处理新内容的报亭应用程序
>从外部配件接收定期更新的应用程序
实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架来实现这些服务的相关方面.声明服务可以让系统知道您使用哪些服务,但在某些情况下,系统框架实际上会阻止您的应用程序被暂停.“
不确定你是否正在尝试使用加速度计来做这些事情(或许可以与蓝牙设备通信?),但如果是这样,你需要在应用程序中声明你支持的服务.为此,您需要将UIBackgroundModes键添加到Info.plist中,然后添加一个包含您尝试使用的服务的相关字符串的数组.有关字符串的完整列表,请参阅上面链接的文档页面.
如果你没有尝试使用加速计做任何这些事情,看起来好像你可能运气不好.虽然我喜欢那里错了..(有人吗?)