AppleWatch与App间的通信

81701494 2015-06-27

 最近在进行applewatch的开发,打算做一个微信的demo出来。

由于数据处理和业务逻辑都会放在app端,watchkit只是用来展示用途,在app处于非激活的状态下无法进行请求的问题还未解决,这个demo只是watch和app简单的相互传值通信。其中app端中CFNotificationCenterPostNotification 方法中的userInfo参数无法成功传值到watch端中,还在尝试用其他的方法实现,解决到这个问题的朋友麻烦留言探讨一下实现方案。

从app端传值到watch端:

发送端:

CFStringRef observedObject = CFSTR("xiaok");
    NSMutableDictionary *userInfo2 = [NSMutableDictionary new];
    [userInfo2 setValue:@"PicName" forKey:@"PicName"];
    [userInfo2 setValue:@"Source" forKey:@"Source"];
    CFDictionaryRef userInfo = (__bridge CFDictionaryRef)(userInfo2);
    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(),(__bridge CFStringRef)@"xiaok",observedObject,userInfo,YES );

接受端:

- (void) watchForDataChanges {
    // Listen for notifications on Darwing
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
                                    (__bridge const void *)(self),
                                    NotificationReceivedCallback,
                                    CFSTR("xiaok"),
                                    NULL,
                                    CFNotificationSuspensionBehaviorDeliverImmediately);
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cocoaNotificationCallBack) name:@"playersChangedCocoa" object:nil];
}

static void NotificationReceivedCallback(CFNotificationCenterRef center,
                                         void *observer, CFStringRef name,
                                         const void *object, CFDictionaryRef
                                         userInfo)
{
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"playersChangedCocoa" object:nil];
}

void darwinNotificationCenterCallBack() {
    NSLog(@"Notification received from iPhone app!");
    
    // Go from Darwin to Cocoa land
    [[NSNotificationCenter defaultCenter] postNotificationName:@"playersChangedCocoa" object:nil];
}


- (void) cocoaNotificationCallBack {
    NSLog(@"Notification received from ourselves in Cocoa");
    [self.displayLB setText:@"app点击了噢"];
    
}

从watch传值到app端:

发送端:

- (IBAction)btnClick1 {
    [WKInterfaceController openParentApplication:@{@"tag":@"1"} reply:^(NSDictionary *replyInfo, NSError *error) {
    }];
}

接受端:在appdelegate.m

-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
{
    NSString *type = userInfo[@"tag"];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"WATCH_CLICK" object:type];
}

demo github:https://github.com/lkjxshi/WatchToAppDemo.git

相关推荐