4

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

我怎样才能做到这一点?

4

1 回答 1

1

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

“实施长时间运行的后台任务

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

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

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

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

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

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

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

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

如果您尝试使用加速度计来做任何这些事情,那么看起来您可能不走运。虽然我很想在那里犯错..(有人吗?)

于 2013-03-01T04:09:31.737 回答