iOS - WatchKit 如何将 message/data 从 iPhone 应用程序发送到 WatchKit 应用程序?
iOS - WatchKit how to send message/data from iPhone app to WatchKit app?
我正在创建一个 WatchKit 应用程序,想知道如何将 message/data 从 iPhone 发送到手表?
我知道如何使用“openParentApplication:reply:”和“application 以相反的方式进行操作(观看 -> phone) :handleWatchKitExtensionRequest:reply:' 但找不到任何关于如何从 phone 与手表通信的文档。
简单的设置就是 iPhone 应用程序有一个按钮,按下该按钮会更新 Watch 应用程序上的标签。
任何人都可以指出我正确的方向吗?
您应该尝试使用应用组在 iOS 应用和应用扩展之间共享数据。
在您的 Apple Watch 应用界面控制器中 class:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.<domain>.<appname>.AppShare")
sharedDefaults?.setObject("Came from Apple Watch App", forKey: "AppleWatchData")
sharedDefaults?.synchronize()
在您的父应用中:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.<domain>.<appname>.AppShare")
if let appWatchData = sharedDefaults?.objectForKey("AppleWatchData") as? NSString {
println(appWatchData)
}
"AppShare" 是您在 Capabilities 中为父应用目标创建应用组时分配的名称。
首先,您必须为目标启用应用组:
然后就可以通过NSUserDefaults
开始读写对象了:
// write
let sharedDefaults = NSUserDefaults(suiteName: appGroupName)
sharedDefaults?.setInteger(1, forKey: "myIntKey")
// read
let sharedDefaults = NSUserDefaults(suiteName: appGroupName)
let myIntValue = sharedDefaults?.integerForKey("myIntKey")
请参阅Apple Watch Programming Guide: Developing for Apple Watch
中的与包含的iOS应用程序共享数据一章
或者,
您甚至可以使用此解决方案在 2 个不同的应用程序之间共享文件,当然也可以在手表应用程序(扩展)和父 iOS 应用程序之间共享文件。
第一步由@zisoft 描述,启用应用组。
然后在运行时获取组容器的URL,
- (NSString *)containerPath
{
return [[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"YOUR_APP_GROUP"] relativePath];
}
现在你可以在给定的路径上写任何 file/folder,下面是我的示例片段,
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.array];
NSString *path = [[[self containerPath] stringByAppendingPathComponent:@"Library"] stringByAppendingPathComponent:@"history"];
if ([data writeToFile:path atomically:YES])
{
NSLog(@"Success");
}
else
{
NSLog(@"Failed");
}
这对我有用。尝试在手表中使用
- (void)registerToNotification
{
[ self unregisterToNotification ];
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), (__bridge const void *)(self), didReceivedDarwinNotification, CFSTR("NOTIFICATION_TO_WATCH"), NULL, CFNotificationSuspensionBehaviorDrop);
}
- (void)unregisterToNotification
{
CFNotificationCenterRemoveObserver(CFNotificationCenterGetDarwinNotifyCenter(), (__bridge const void *)( self ), CFSTR( "NOTIFICATION_TO_WATCH" ), NULL );
}
void didReceivedDarwinNotification()
{
// your code
}
在主应用程序中
- (void)sendNotificationToWatch:(NSDictionary*)info
{
CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("NOTIFICATION_TO_WATCH"), (__bridge const void *)(self), nil, TRUE);
}
watchOS 2.0 有一个名为 Watch Connectivity Framework 的新框架,可让您在两个设备之间发送消息。
That framework provides a bidirectional communications channel for sending files and data dictionaries between the two processes
请查看示例 including the example of 使用调试模式的实际字典。
WiKi 示例也是 available。
祝你好运。
我正在创建一个 WatchKit 应用程序,想知道如何将 message/data 从 iPhone 发送到手表?
我知道如何使用“openParentApplication:reply:”和“application 以相反的方式进行操作(观看 -> phone) :handleWatchKitExtensionRequest:reply:' 但找不到任何关于如何从 phone 与手表通信的文档。
简单的设置就是 iPhone 应用程序有一个按钮,按下该按钮会更新 Watch 应用程序上的标签。
任何人都可以指出我正确的方向吗?
您应该尝试使用应用组在 iOS 应用和应用扩展之间共享数据。
在您的 Apple Watch 应用界面控制器中 class:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.<domain>.<appname>.AppShare")
sharedDefaults?.setObject("Came from Apple Watch App", forKey: "AppleWatchData")
sharedDefaults?.synchronize()
在您的父应用中:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.<domain>.<appname>.AppShare")
if let appWatchData = sharedDefaults?.objectForKey("AppleWatchData") as? NSString {
println(appWatchData)
}
"AppShare" 是您在 Capabilities 中为父应用目标创建应用组时分配的名称。
首先,您必须为目标启用应用组:
然后就可以通过NSUserDefaults
开始读写对象了:
// write
let sharedDefaults = NSUserDefaults(suiteName: appGroupName)
sharedDefaults?.setInteger(1, forKey: "myIntKey")
// read
let sharedDefaults = NSUserDefaults(suiteName: appGroupName)
let myIntValue = sharedDefaults?.integerForKey("myIntKey")
请参阅Apple Watch Programming Guide: Developing for Apple Watch
中的与包含的iOS应用程序共享数据一章或者,
您甚至可以使用此解决方案在 2 个不同的应用程序之间共享文件,当然也可以在手表应用程序(扩展)和父 iOS 应用程序之间共享文件。
第一步由@zisoft 描述,启用应用组。
然后在运行时获取组容器的URL,
- (NSString *)containerPath
{
return [[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"YOUR_APP_GROUP"] relativePath];
}
现在你可以在给定的路径上写任何 file/folder,下面是我的示例片段,
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.array];
NSString *path = [[[self containerPath] stringByAppendingPathComponent:@"Library"] stringByAppendingPathComponent:@"history"];
if ([data writeToFile:path atomically:YES])
{
NSLog(@"Success");
}
else
{
NSLog(@"Failed");
}
这对我有用。尝试在手表中使用
- (void)registerToNotification
{
[ self unregisterToNotification ];
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), (__bridge const void *)(self), didReceivedDarwinNotification, CFSTR("NOTIFICATION_TO_WATCH"), NULL, CFNotificationSuspensionBehaviorDrop);
}
- (void)unregisterToNotification
{
CFNotificationCenterRemoveObserver(CFNotificationCenterGetDarwinNotifyCenter(), (__bridge const void *)( self ), CFSTR( "NOTIFICATION_TO_WATCH" ), NULL );
}
void didReceivedDarwinNotification()
{
// your code
}
在主应用程序中
- (void)sendNotificationToWatch:(NSDictionary*)info
{
CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("NOTIFICATION_TO_WATCH"), (__bridge const void *)(self), nil, TRUE);
}
watchOS 2.0 有一个名为 Watch Connectivity Framework 的新框架,可让您在两个设备之间发送消息。
That framework provides a bidirectional communications channel for sending files and data dictionaries between the two processes
请查看示例
WiKi 示例也是 available。
祝你好运。