美文网首页iOS开发技术分享iOS Developer
iOS | iPhone唤醒iWatch 以及 iWatch唤醒

iOS | iPhone唤醒iWatch 以及 iWatch唤醒

作者: 麋鹿的兔 | 来源:发表于2017-01-16 14:21 被阅读806次

    最近有些忙,watchApp做完了暂时告一段落了,但知识还是要整理,还是要记下的。
    做watchApp,总会有需要唤醒iPhoneApp,再进一步做些操作的时候,代码不多,几句话搞定,在此做简单整理。

    一、iPhone唤醒iWatch

    iPhone端配置configuration信息,healthStore调用startWatchApp方法,iWatch端调用handle方法可取出configuration信息,即实现了iPhone唤醒iWatch。

    1、Objective-C
    //iPhone App
    - (void)wakeUpWatchApp {
        //配置一些configuration信息
        HKWorkoutConfiguration *configuration = [[HKWorkoutConfiguration alloc]init];
        configuration.locationType = HKWorkoutSessionLocationTypeOutdoor;
        configuration.activityType = HKWorkoutActivityTypeRunning;
        //检查是否安装对应的watchApp
        if ([WCSession defaultSession].isWatchAppInstalled && [WCSession defaultSession].isPaired) {
            //调用startWatchApp即可
            [self.healthStore startWatchAppWithWorkoutConfiguration:configuration completion:^(BOOL success, NSError * _Nullable error) {
                if (error) {
                } else {
                    // 唤醒成功
                }
            }];
        }
    }
    
    //watch app
    //handle方法 可接收到host app端所配置的 configuration
    -  (void)handleWorkoutConfiguration:(HKWorkoutConfiguration *)workoutConfiguration {
         //do something
         //可直接取出configuration信息 workoutConfiguration.activityType
    }
    
    2、Swift
    // iPhone App
    func wakeUpWatchApp () {
        //配置一些configuration信息
        var workoutConfiguration = HKWorkoutConfiguration()
        workoutConfiguration.locationType = .outdoor        
        workoutConfiguration.activityType = .running
        //检查是否安装对应的watchApp
        if WCSession.default().isPaired && WCSession.default().isWatchAppInstalled {
            //调用startWatchApp即可
            healthStore.startWatchApp(with: workoutConfiguration) { (success, error) in
                 // ...
        }   
    }
    
    //watch app
    //handle方法 可接收到host app端所配置的 configuration
    func handle(_ workoutConfiguration: HKWorkoutConfiguration) {
         //do something
         //可直接取出configuration信息 workoutConfiguration.activityType
    }
    

    二、iWatch唤醒iPhone

    利用WCSession向iPhone app发送消息,则唤醒iPhone。
    需要注意的一点是,watch唤醒iPhoneApp并不能将app拉起至前端,但在后台已经启动了,所以没有看到app起来不要以为他没唤醒哦~

    小方法:可让iPhone app启动后 发出一些声音,这样你就可以知道已经唤醒app啦。

    1、Objective-C
    // iPhone app
    // appDelegate.m  
    // 当watch app 使用sendMessage发送消息时 iPhone app会调用此方法 做回应处理
    - (void)session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler {
        // 接收到watch app 发送的message
        NSLog(@"Message: %@", message);
        // 返回发送 消息已到达 信息至 watch app
        replyHandler(@"Text was received.");
    }
    
    //watch app
    - (void) wakeUpMyApp {
        //需检查app是否可达,才能使消息发送成功
        if ([WCSession defaultSession].isReachable) {
            //发送message : wakeUp
            [[WCSession defaultSession].sendMessage: "wakeUp" replyHandler: ^(NSDictionary<NSString *,id> * __nonnull replyMessage) {
                 // do something
                 NSLog(@"reply info : %@",replyMessage);
            } errorHandler:^(NSError * __nonnull error) {
                //do something
                 NSLog(@"Error = %@",error);
            }];
        }
    }
    
    
    2、Swift
    //watch app
    func wakeUpMyAPP () {
         //需检查app是否可达,才能使消息发送成功
         if WCSession.default().isReachable {
             //发送message : wakeUp
             WCSession.default().sendMessage(["message": "wakeUp"], replyHandler: {(message: [String : Any]) -> Void in
                 //do something
                 print("reply info : \(message)")               
             }, errorHandler: {(Error) -> Void in
                 //do something
                 print("Error : \(Error)")
             })
         }
    }
    
    //iPhone app
    func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
         // 接收到watch app 发送的message
         print("message : \(message)")    
         // 返回发送 消息已到达 信息至 watch app
         replyHandler("Text was received.")
    }
    

    相关文章

      网友评论

        本文标题:iOS | iPhone唤醒iWatch 以及 iWatch唤醒

        本文链接:https://www.haomeiwen.com/subject/ucsppttx.html