2

watchOS1 には、メソッド「openParentApplication」がありました。このメソッドは、フォアグラウンドまたはバックグラウンドで実行されていないときでも電話アプリケーションと通信し、すぐに応答をフェッチしました。watchOS2にも同様のものが必要です。iPhone アプリケーションが実行されていない場合でも、時計アプリケーションが電話アプリとすぐに通信できるようにします。updateApplicationContext:error:、 、 などのsendMessage:replyHandler:errorHandler:メソッドはtransferUserInfo:、このシナリオでは役に立ちません。

誰かがこれを達成するためのより良いアプローチを提案できますか?

4

1 に答える 1

3

実際sendMessage:replyHandler:errorHandler:には、あなたが求めていることを正確に行っています。時計が携帯電話に接続されている限り、すぐにメッセージへの応答を取得します。これは、アプリがフォアグラウンド、バックグラウンド、またはまったく実行されていないときに機能します。

設定方法は次のとおりです。

WatchExtension で:

セッションをセットアップします。通常、ExtensionDelegate で:

func applicationDidFinishLaunching() {
    if WCSession.isSupported() {
        let session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}

そして、アプリから何かが必要なときにメッセージを送信します。

if WCSession.defaultSession().reachable {
    let messageDict = ["message": "hello iPhone!"]
    WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
        print(replyDict)
        }, errorHandler: { (error) -> Void in
        print(error)
    }
}

iPhone アプリの場合:

セッションのセットアップは同じですが、今回はデリゲートも設定します。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    ...
    if WCSession.isSupported() {
        let session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}

次にデリゲート メソッドを実装して、応答をウォッチに送信します。

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    replyHandler(["message": "Hello Watch!"])
}

これは、Watch と iPhone の間に接続があるときはいつでも機能します。アプリが実行されていない場合、システムはバックグラウンドで起動します。したがって、基本的には次のように機能しますopenParentApplication(_:reply:)

于 2015-10-16T14:47:05.287 に答える