Ios watchOS 2:背景中的触觉反馈

Ios watchOS 2:背景中的触觉反馈,ios,apple-watch,watchos-2,Ios,Apple Watch,Watchos 2,我想我已经知道这个问题的答案了,但我想问的只是为了彻底 以Apple Watch内置的地图应用程序为例。当您使用逐圈方向时,当您需要向左或向右转弯时,手表会播放自定义的触觉模式,即使屏幕关闭且应用程序处于后台。另一个例子是当你在锻炼时——如果你设定了一个目标,当你达到50%和100%时,即使你当时没有看手表,你的手腕也会被轻拍一下(屏幕关闭,应用程序背景) 在watchOS 2中,我们第三方开发者有没有办法让应用程序在屏幕关闭且应用程序处于后台时播放特定的触觉模式?我知道playHaptic:方

我想我已经知道这个问题的答案了,但我想问的只是为了彻底

以Apple Watch内置的地图应用程序为例。当您使用逐圈方向时,当您需要向左或向右转弯时,手表会播放自定义的触觉模式,即使屏幕关闭且应用程序处于后台。另一个例子是当你在锻炼时——如果你设定了一个目标,当你达到50%和100%时,即使你当时没有看手表,你的手腕也会被轻拍一下(屏幕关闭,应用程序背景)


在watchOS 2中,我们第三方开发者有没有办法让应用程序在屏幕关闭且应用程序处于后台时播放特定的触觉模式?我知道
playHaptic:
方法在应用程序处于活动状态时起作用,可以让您播放多种不同类型的触觉模式,我知道在应用程序处于非活动状态时,您可以收到通知,但通知只会播放“通知”触觉,在这方面没有选择。

您只能在应用程序处于活动状态时运行自定义代码。所以我恐怕你不能这么做。

这是我在后台玩触觉游戏的方式, 首先,您需要在Watch Extensions的功能中启用background mod,并启用:训练处理和音频、Airplay。 您还需要为WatchExtension HealthKit启用

#导入 添加HKWorkoutSessionDelegate

-(void)awakeWithContext:(id)context{

[super awakeWithContext:context];
HKHealthStore *cwHealthStore = [[HKHealthStore alloc] init];
cwConfiguration = [[HKWorkoutConfiguration alloc] init];
cwConfiguration.activityType = HKWorkoutActivityTypeOther;
NSError *error;
HKWorkoutSession *cwSession = [[HKWorkoutSession alloc] initWithConfiguration:cwConfiguration error:&error];
[cwSession setDelegate:self];
if (!error) {
    [cwHealthStore startWorkoutSession:cwSession];
}
    [self test];
 }


#pragma mark WorkoutSession Delegates

- (void)workoutSession:(HKWorkoutSession *)workoutSession
  didChangeToState:(HKWorkoutSessionState)toState
         fromState:(HKWorkoutSessionState)fromState
              date:(NSDate *)date{
NSLog(@"------>%ld", (long)toState);
}

 - (void)workoutSession:(HKWorkoutSession *)workoutSession didFailWithError:(NSError *)error{
NSLog(@"%@", error);
}
现在你可以在背景中玩触觉游戏了

  -(void)test{
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerTrick:) userInfo:nil repeats:true];


 }

- (void)timerTrick:(NSTimer *)time {

        [[WKInterfaceDevice currentDevice] playHaptic:WKHapticTypeStart];

}
离开控制器后,不要放弃停止训练课程:

     [cwHealthStore endWorkoutSession:cwSession];

几年后,为了更新我自己的问题——在watchOS 3中,训练应用程序被授予后台执行,但没有触觉(我想)


在watchOS 4中,训练应用程序、录音应用程序和导航应用程序具有后台执行功能;导航应用程序可以在后台发送触觉。此外,“最前面的应用程序”(上次使用的应用程序,如果腕部在2分钟内抬起,仍然会出现;如果启用了最前面的延长时间,则会出现8个应用程序)具有在Watch连接或NSURLSession数据传输结束时或收到通知时发送触觉的一些特权。有关详细信息,请参阅文档。

我就是这么想的,谢谢。健康工具包的东西很有趣,但我不知道。。。我们正在考虑一个公司内部的应用程序(没有应用程序商店),所以我们可以假装是一个锻炼应用程序,并丢弃心率数据。你知道心率数据的频率吗?是否有其他框架可以让您定期回调并有机会运行代码?大约每3-5秒您将获得心率样本。据我所知,没有其他atm框架。您是否正在查看HKWorkoutSessionLegate workoutSession:didChangeToState:fromState:?文档中说:“如果您的应用程序被挂起,则代理会在应用程序恢复后收到此调用。这意味着您可能会在状态更改后很久收到通知。请检查date参数以确定状态更改实际发生的时间。”:HealthKit查询流在监视屏幕关闭时延迟发送结果。当应用程序重新启动时,您将在同一时间获得所有结果,因此此方法即使在训练应用程序中也不起作用。苹果之所以这样设计,可能是因为播放触觉瞬间会阻止心率传感器收集数据我也遇到过类似的情况,我希望在配对的iPhone上触发事件时,Apple Watch应用程序能够唤醒。我的应用程序停用太快,我无法将来自iPhone的新数据推送到手表上。听起来这是目前不可能的,除非是在苹果应用程序中,或者是声称可以做其他事情的应用程序中,比如健康或地图应用程序-(苹果已经解决了这个问题吗?我的app@ChronicTimer将从中受益匪浅。我有一个训练课程,但仍然无法提供此功能。不,我怀疑在明年WWDC 2016年之前会有任何变化。苹果没有提供新API的习惯,除非最新的主要操作系统版本仍处于测试阶段(通常在六月到九月之间)。