我想我已经知道了这个问题的答案,但我想要问一下这个问题。
考虑Apple Watch内置地图应用。当您使用转弯指示时,当向左或向右转时,手表会播放自定义触觉模式 - 即使屏幕关闭且应用程序背景也是如此。另一个例子是当你正在锻炼时 - 如果你已经设定了一个目标,当你获得50%和100%时,即使你没有看手表,你也会轻轻拍打你的手腕。当时(屏幕关闭,应用程序背景)。
在watchOS 2中,当屏幕关闭且应用程序背景化时,我们的第三方开发者是否有办法让应用程序播放某种触觉模式?我知道playHaptic:
方法在应用程序处于活动状态时有效,可以让您播放几种不同类型的触觉模式,我知道当应用程序处于非活动状态时,您可以收到通知 - 但通知只会发挥'通知'的触觉感觉,没有选择。
答案 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。