簡體   English   中英

在應用程序中檢測WatchKit擴展的存在

[英]Detect WatchKit extension presence in app

我有一個應用程序,如果配對的Apple Watch上安裝了WatchKit擴展程序,則我希望在更新和緩存方面的行為與其他應用程序有所不同。 如果watchkit擴展程序有啟動的機會(您已經將手表配對並安裝了應用程序),那么我想進行更多的高速緩存。

有什么方法可以通過我的iOS應用程序檢測Apple Watch上是否安裝了Apple WatchKit Extension? 除了在第一次啟動時設置標志,並希望此后不將其刪除?

干杯

尼克

在這里重申我的答案。 無法檢測手表是否已通過編程方式與手機配對。

我不知道這是否對您有用,但是我執行的操作是在啟動手表應用程序時使用userDefaults(組)設置標志。 然后,我可以在主應用程序中對其進行檢查。 如果設置了該標志,則表明該應用已安裝。 當然這不是防彈的,但鑒於WatchKit的當前限制,這是我能想到的最好的方法。 它不會告訴您手機是否已配對,但會告訴您您的應用程序已安裝在手表上,因此手機本身必須(或曾經)配對過。

使用WatchConnectivity框架,您可以檢查配對的設備是否可用並且該應用程序正在運行。

  • 從“目標->功能”激活應用組
  • 在需要了解隨播應用正在運行的設備上嘗試使用此代碼。

目標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"])
}

從iOS 9開始, WCSession提供了isWatchAppInstalled 您可以通過導入WatchConnectivity@import WatchConnectivity; ),啟動會話( [[WCSession defaultSession] activateSession]並調用[[WCSession sharedSession] isWatchAppInstalled] 請參閱此處: https//developer.apple.com/documentation/watchconnectivity/wcsession/1615623-iswatchappinstalled

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM