如何从iPhone上的Watch触发后台进程(触发器:Watch)?

时间:2015-05-19 09:38:07

标签: ios swift background-process uilocalnotification watchkit

我想添加到我的Watch应用程序功能,该功能向iPhone应用程序发送本地通知(当iPhone应用程序在后台或iPhone被锁定时)。

我知道如何创建本地通知本身。

我要求的是如何通过(例如)点击Apple Watch上的按钮触发iPhone上的后台处理(其中还包含本地通知)。

2 个答案:

答案 0 :(得分:3)

WKInterfaceController.openParentApplication是与iPhone通信的官方方式。 Documentation

您传递userInfo词典中的参数并通过reply块检索结果。

在iPhone上,请求由appDelegate' handleWatchKitExtensionRequest方法处理。 Documentation

答案 1 :(得分:1)

我的InterfaceController.swift中的代码:

    @IBAction func btn() {

    sendMessageToParentApp("Button tapped")

}

// METHODS #2:

func sendMessageToParentApp (input:String) {

    let dictionary = ["message":input]

    WKInterfaceController.openParentApplication(dictionary, reply: { (replyDictionary, error) -> Void in

        if let castedResponseDictionary = replyDictionary as? [String:String], responseMessage = castedResponseDictionary["message"] {

            println(responseMessage)
            self.lbl.setText(responseMessage)

        }

    })

}

接下来,我在AppDelegate.swift中创建了新方法:

    func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {

    if let infoDictionary = userInfo as? [String:String], message = infoDictionary["message"] {

        let response = "iPhone has seen this message."    // odešle se string obsahující message (tedy ten String)
        let responseDictionary = ["message":response]   // tohle zase vyrobí slovník "message":String

        NSNotificationCenter.defaultCenter().postNotificationName(notificationWatch, object: nil)

        reply(responseDictionary)

    }

}

正如您所看到的,我使用通知来让iOS应用知道该按钮已被点击。在ViewController.swift中,我有Notification Observer和函数,每当观察者捕获用户点击监视按钮的通知时执行该函数(“notificationWatch”是带有通知键的全局变量)。希望这对任何人都有帮助。