最近有些忙,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.")
}
网友评论