在应用

时间:2015-05-15 18:44:18

标签: ios cocoa-touch watchkit

我有一个应用程序,如果在配对的Apple Watch上安装了WatchKit扩展程序,那么在更新和缓存方面我的行为会有所不同。如果watchkit扩展程序有任何启动的机会(你已配对手表并安装了应用程序),那么我想做更多的重度缓存。

有什么方法可以检测Apple Watch上Apple Watch上是否安装了Apple WatchKit Extension吗?除了第一次设置标志之外,还希望它不会被删除吗?

干杯

的Nik

4 个答案:

答案 0 :(得分:2)

我会重申我给出的答案here。无法通过编程方式检测手表是否已与手机配对。

答案 1 :(得分:0)

我不知道这是否适合您,但我所做的是使用userDefaults(group)在启动监视应用程序时设置标记。然后我可以在主应用程序中检查它。如果设置了标志,我知道应用程序已安装。当然这不是防弹的,但考虑到WatchKit的当前限制,这是我能想到的最好的。它并不能告诉您手机是否已配对,但它告诉您手机上已安装了您的应用,因此手机本身必须(或曾经一次)配对。

答案 2 :(得分:0)

使用WatchConnectivity框架,您可以检查配对设备是否可用且应用程序是否正在运行。

  • 从" target - >激活应用组能力"
  • 在需要知道随播应用正在运行的设备上尝试此代码。

目标C:

#import <WatchConnectivity/WatchConnectivity.h>

yourClass : Superclass <WCSessionDelegate>

WCSession* session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];

-(void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(NSError *)error
{
  if (activationState == WCSessionActivationStateActivated) {
      [[WCSession defaultSession] sendMessage:@{@"fromThisDevice":@"hello"} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
          NSLog(@"reply %@", replyMessage[@"fromOtherDevice"]);
      } errorHandler:^(NSError * _Nonnull error) {
          NSLog(@"error %@", error.userInfo);
      }];
  }
}

- (void) session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler{
   NSLog(@"message %@", message[@"fromOtherDevice"]);
   replyHandler(@{@"fromThisDevice":@"hello"});
}

夫特:

import WatchConnectivity

yourClass : Superclass, WCSessionDelegate

let session = WCSession.default()
session.delegate = self
session.activate()

func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
    if activationState == WCSessionActivationState.activated{
        WCSession.default().sendMessage(["fromThisDevice" : "hello"], replyHandler: { (reply:[String : Any]) -> Void in
            print(reply["fromOtherDevice"] as Any)
        }, errorHandler: { (error) -> Void in
            print(error)
        })
    }
}

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
    print(message["fromOtherDevice"] as Any)
    replyHandler(["fromThisDevice" : "hello"])
}

答案 3 :(得分:0)

自iOS 9起,WCSession提供isWatchAppInstalled。您可以导入WatchConnectivity@import WatchConnectivity;),开始会话([[WCSession defaultSession] activateSession])并致电[[WCSession sharedSession] isWatchAppInstalled]来使用它。见这里:https://developer.apple.com/documentation/watchconnectivity/wcsession/1615623-iswatchappinstalled