gpt4 book ai didi

后台/ sleep 模式下的 iOS Coremotion 加速器更新

转载 作者:可可西里 更新时间:2023-11-01 04:59:18 24 4
gpt4 key购买 nike

当应用程序在后台运行/设备处于 sleep 模式时,我需要加速器更新。有些应用程序会这样做,但我无法使其正常工作。为此,我在我的 appdelegate 和 applicationDidEnterBackground 中有一个 CoreMotion 属性,我调用

-(void) startAccelerationUpdates
{

self.motionManager.deviceMotionUpdateInterval = 0.01;
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error){
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"acceleration x %f", motion.userAcceleration.x);
NSLog(@"acceleration y %f", motion.userAcceleration.y);
NSLog(@"acceleration z %f", motion.userAcceleration.z);
}
);
}
];
}

在应用程序列表中,我将所需的背景模式放入应用程序寄存器以进行位置更新。当我将设备置于 sleep 模式或后台时,日志中不会出现任何更新。当应用程序激活时,coremotion 开始登录。有人给我提示吗?谢谢。

最佳答案

因为你把它分派(dispatch)到主队列了。要启用后台事件,您应该将其分派(dispatch)到全局队列:

dispatch_queue_t lowQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
dispatch_async(lowQueue, ^{ ...

更新 添加 Swift 版本:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)) {
// do some task
}

引用:using the same dispatch queue in a method for background processing

关于后台/ sleep 模式下的 iOS Coremotion 加速器更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16647628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com