watchOS 2:背景中的触觉反馈

时间:2015-07-29 18:06:37

标签: ios apple-watch watch-os-2

我想我已经知道了这个问题的答案,但我想要问一下这个问题。

考虑Apple Watch内置地图应用。当您使用转弯指示时,当向左或向右转时,手表会播放自定义触觉模式 - 即使屏幕关闭且应用程序背景也是如此。另一个例子是当你正在锻炼时 - 如果你已经设定了一个目标,当你获得50%和100%时,即使你没有看手表,你也会轻轻拍打你的手腕。当时(屏幕关闭,应用程序背景)。

在watchOS 2中,当屏幕关闭且应用程序背景化时,我们的第三方开发者是否有办法让应用程序播放某种触觉模式?我知道playHaptic:方法在应用程序处于活动状态时有效,可以让您播放几种不同类型的触觉模式,我知道当应用程序处于非活动状态时,您可以收到通知 - 但通知只会发挥'通知'的触觉感觉,没有选择。

3 个答案:

答案 0 :(得分:2)

您只能在应用处于活动状态时运行自定义代码。所以我担心你不能这样做。

答案 1 :(得分:1)

以下是我在后台播放触觉的方式, 首先,您需要在WatchExtension的Capabilities中启用后台mod并启用:Workout Processing and Audio,Airplay。 您还需要启用WatchExtension HealthKit。

#import< HealthKit / HealthKit.h> 添加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];

答案 2 :(得分:0)

仅仅在几年后发布我自己的问题的更新 - 在watchOS 3锻炼应用程序被授予后台执行,但没有触觉(我认为)。

在watchOS 4中,锻炼应用程序,录音应用程序和导航应用程序具有后台执行功能;导航应用可以在后台发送触觉。此外,"最前面的应用程序" (如果手腕在2分钟内被抬起,则最后使用的应用程序,或者如果启用了最长时间延长,则仍然显示8)具有在WatchConnectivity或NSURLSession数据传输结束时或在收到通知时发送触觉的一些权限。请参阅docs for details。