gpt4 book ai didi

ios - 有没有办法在后台让我的应用程序在 CMMotionActivity 更改时收到通知?

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:57 25 4
gpt4 key购买 nike

我想知道如果 CMMotionActivity 发生变化,系统是否可以在后台唤醒应用程序,例如,如果用户坐下后开始走路/运行,我希望能够执行一些代码并安排本地通知。

有没有办法要求系统为此在后台唤醒我的应用程序?

编辑:通过查看 reference ,这似乎是不可能的(“[...] 并且在您的应用程序暂停时不会提供更新。”)但也许还有其他方法吗?

最佳答案

我解决了这个问题,创建一个后台计时器并在调用方法的选择器中检查事件类型。只需查看代码,以防它对您有用。我接受对此的建议、更正和建议。

#define k_timer_time 10.0f
@property NSTimer *timer;

- (void) createBackGroundTimerToCheckMotion{
// create new uiBackgroundTask
__block UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];

__weak __typeof(self) weakSelf = self;

// and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
weakSelf.timer = [NSTimer scheduledTimerWithTimeInterval:k_timer_time target:self selector:@selector(onTick:) userInfo:nil repeats:YES];
weakSelf.timer.tolerance = 5;
[[NSRunLoop currentRunLoop] addTimer:weakSelf.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
});

- (void) onTick:(NStimer*)timer{
if([CMMotionActivityManager isActivityAvailable])
{
__weak __typeof(self) weakSelf = self;

CMMotionActivityManager *cm = [[CMMotionActivityManager alloc] init];

CMPedometer *sc = [[CMPedometer alloc] init];

NSDate *now = [NSDate date];

NSDate *last30Sec = [now dateByAddingTimeInterval:-30];

[cm queryActivityStartingFromDate:last30Sec toDate:now toQueue:[NSOperationQueue mainQueue] withHandler:^(NSArray *activities, NSError *error)
{
[activities enumerateObjectsUsingBlock:^(CMMotionActivity *a, NSUInteger idx, BOOL * _Nonnull stop) {
//Your stuff here

}];
}];
}
else
{
NSLog(@"Error accessing Motion data");
}

关于ios - 有没有办法在后台让我的应用程序在 CMMotionActivity 更改时收到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27753086/

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