使用CoreMotion框架在后台接收加速度计更新

iOS*_*Dev 3 objective-c accelerometer ios core-motion

我正在使用以下代码获取加速度计数据(使用CoreMotion框架):

CMMotionManager *motionManager = [[CMMotionManager alloc] init];    
motionManager.accelerometerUpdateInterval = 1.0 / 60.0;
[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
                                                 withHandler:^(CMAccelerometerData  *accelerometerData, NSError *error) {
                                                 NSLog(@"ACCELEROMETER DATA = %@",accelerometerData);
                                                 }];
Run Code Online (Sandbox Code Playgroud)

当应用程序处于前台模式时,我正在接收日志,但是当它进入后台时,我只在应用程序中的音乐正在播放时才会收到日志.我已将以下内容添加到app info plist文件中:

- Required background modes
   - App registers for location updates
   - App plays audio or streams audio/video using AirPlay
Run Code Online (Sandbox Code Playgroud)

问题是:当音乐没有播放时,如何在后台接收加速度计更新?

Tos*_*lji 6

您不仅可以使用加速度计从背景中获取数据,

就像你说的那样App registers for location updates,在前台启动位置管理器.

实现长时间运行的后台任务

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

  1. 在后台播放用户可听内容的应用,例如音乐播放器应用
  2. 在后台录制音频内容的应用程序.
  3. 随时向用户通知其位置的应用,例如导航应用
  4. 支持互联网协议语音(VoIP)的应用
  5. 需要定期下载和处理新内容的应用
  6. 从外部配件接收定期更新的应用程序

  • 的确是!请查看表3-1:https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html (2认同)