- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个在 watch 和 iOS 父应用程序之间进行通信的应用程序。它通过打开 WatchKit 扩展将数据发送到父应用程序。我知道 openParentApplication:reply
在调用时会从 Apple Watch 打开 iPhone 应用程序。之后,在应用程序的委托(delegate)中调用 application:handleWatchKitExtension:reply
。
从那里你可以打开一个到 View Controller 的通知:
NSNotificationCenter.defaultCenter().postNotificationName(aName: String, object anObject: AnyObject?)
“aName”是您可以在 View Controller 中打开的内容:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: Selector("handleWatchKitNotification:"),
name: "WatchKitSaysHello",
object: nil)
这是我的 WatchKit 扩展中的界面 Controller 代码:
//
// InterfaceController.swift
// SendColors WatchKit Extension
//
// Created by Tommy on 12/30/14.
// Copyright (c) 2014 Tommy. All rights reserved.
//
import WatchKit
import Foundation
class InterfaceController: WKInterfaceController {
var ypo = false
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Configure interface objects here.
}
@IBOutlet weak var redButton: WKInterfaceButton!
@IBOutlet weak var greenButton: WKInterfaceButton!
@IBOutlet weak var blueButton: WKInterfaceButton!
@IBAction func onRedButtonClick() {
if ypo {
openParentAppWithColor("Yellow")
}
else {
openParentAppWithColor("Red")
}
}
@IBOutlet weak var moreButton: WKInterfaceButton!
@IBAction func moreButtonClick() {
if !ypo {
ypo = true
redButton.setTitle("Yellow")
redButton.setColor(UIColor.yellowColor())
greenButton.setTitle("Purple")
greenButton.setColor(UIColor.purpleColor())
blueButton.setTitle("Orange")
blueButton.setColor(UIColor.orangeColor())
moreButton.setTitle("Back")
}
else {
ypo = false
redButton.setTitle("Red")
redButton.setColor(UIColor.redColor())
greenButton.setTitle("Green")
greenButton.setColor(UIColor.greenColor())
blueButton.setTitle("Blue")
blueButton.setColor(UIColor.blueColor())
moreButton.setTitle("More...")
}
}
@IBAction func onGreenButtonClick() {
if ypo {
openParentAppWithColor("Purple")
}
else {
openParentAppWithColor("Green")
}
}
@IBAction func onBlueButtonClick() {
if ypo {
openParentAppWithColor("Orange")
}
else {
openParentAppWithColor("Blue")
}
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
private func openParentAppWithColor(color: String) {
if ["color": color] != nil {
if !WKInterfaceController.openParentApplication(["color": color], reply: { (reply, error) -> Void in
println(reply)
}) {
println("ERROR")
}
}
}
}
我的问题是,比如说我点击了 watch 模拟器上的红色按钮。该操作将被调用,并且在该操作中它调用 openParentApplicationWithColor("Red")
将调用 WKInterfaceController.openParentApplication(["color": color], reply: { (reply, error) -> Void in })
这应该做的是在模拟器上打开父应用程序。它在后台 打开它。因此,我手动打开它。当我手动打开应用程序时,背景是全黑的。
我怀疑问题是我没有在功能选项卡中启用应用程序组。为此,您需要加入开发人员计划。我应该加入它来做这个,还是有其他问题?我正在使用 Xcode 6.2 Beta 3。提前谢谢大家!
最佳答案
我已经测试并可以确认 openParentApplication:reply: 不需要需要启用应用程序组。
I understand that openParentApplication:reply, when called, opens the iPhone application from the Apple Watch.
此方法在后台打开 iPhone 应用程序。在之前的 Xcode 6.2 测试版中,该应用程序确实在前台打开,但这不是预期的行为,也不是 WatchKit Extension-iPhone 应用程序通信在发布版本中的工作方式。
您仍然可以在前台手动启动 iPhone 应用程序,但这不是必需的,除非您想要测试同时使用这两个应用程序的用例。至少对于当前可用的 API,iPhone 应用程序无法通过 watch 应用程序以编程方式启动到前台,而 watch 应用程序无法通过 iPhone 应用程序以编程方式启动。
应用启动后,您报告说屏幕仍然是黑色的,而您希望它根据您发送的消息改变颜色。 application:handleWatchKitExtension:reply:
是否在 iPhone 应用程序中被调用?如果您收到要在 WatchKit 扩展中执行的回复 block ,您就会知道它肯定会被调用,它应该从您的 println(reply)
输出一些东西。如果是这样,那么问题出在 iPhone 应用程序中的代码对您传递给它的消息执行某些操作。在 iPhone 应用程序的 AppDelegate 中查看该方法的实现会很有用。 (请注意,如果该方法未能调用回复 block ,它可能仍在接收消息并且您不会收到回复,但随后您会看到一条关于未收到回复的错误消息。)
请注意,最初运行 Watch 扩展时,您不会在 Xcode 中看到 NSLog 消息或获取断点,但您可以选择“调试”>“附加到进程”> [在“可能的目标”下选择您的 iPhone 应用],然后您将获得iPhone 应用程序而不是 Watch 应用程序的日志和断点,同时仍然能够在 watch 模拟器中使用 Watch 应用程序。对调试最有用。
关于ios - 是否 openParentApplication :reply require App Groups capability to be enabled?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893877/
在我的 watch 应用程序中,我使用 openParentApplication 与父应用程序通信,但这并不总是可靠的,尤其是当我有一段时间没有使用父应用程序时。看来这不是唤醒父应用进行通信。但是,
我正在尝试使用 openParentApplication 从服务器请求数据并在 watch 扩展中使用它,但是当主应用程序未在前台运行时我没有得到任何回复。当主应用程序在前台运行时,一切正常。 最佳
我的 watch 应用程序使用 openParentApplication 从其 WatchKit 扩展请求数据。它从 watch 应用程序的主页 init() 开始: class HomePage
我目前有一个问题。我想要的行为:如果我打开我的 WatchKit 应用程序,我会调用“openParentApplication”。我收到了我想要的数据。但是如果我在真实设备上测试,它就不起作用,因为
在我的应用程序中,我从 iPhone 到 Apple Watch 以及从 Apple Watch 到 iPhone 进行通信。 对于 Apple Watch 上的 Tableview,当应用程序在 i
我在 WKInterfaceController 和 iOS 中调用 openParentApplication 方法等待来自服务器的响应。然后我想再次使用openParentApplication在
打开 Apple Watch 应用程序后,我用 openParentApplication:reply: 唤醒 iPhone 应用程序以获取当前位置。正如苹果所说 here ,您应该避免在 Watch
我正在尝试通过 Watchkit 操作打开 Swift iOS 应用程序,但我无法找到 openParentApplication 方法 // Register notifications in i
我正在实现 Apple Watch。在我的 Watchkit 扩展中,我使用该方法与“主应用程序”通信。 [WKInterfaceController openParentApplicatio
我正在开发一个 Apple Watch 应用程序,它使用 openParentApplication:reply: 方法与其父应用程序通信。 父应用程序与 Web 服务通信,并通过使用包含数据的 NS
我有一个 watch 应用程序需要与父应用程序通信以获取一些信息。这应该只在口袋里使用 watch 和手机时发生。它曾经像这样工作: 在 watch 上的 InterfaceController 中:
我正在尝试实现 Apple Watch 扩展。我需要调用我的 iPhone 应用程序类方法来触发 Web 请求。我在苹果文档中看到了这个方法,我也在尝试同样的方法。但是这个方法没有调用 - (void
在更新到 Xcode 7 之后,我刚刚将我的项目更新到 Swift 2.0,但我的 watch 扩展遇到了问题。 我想要 watchOS 1 目标和 watchOS 2 目标,所以我为 watchOS
我正在尝试将信息从我的 WatchKit 应用程序发送到我的主要父应用程序,据我所知,我应该只能使用 openParentApplication在我的 watchkit 扩展中,handleWatch
情况:我在 Watch 应用程序中使用 openParentApplication 来调用主应用程序中的 handleWatchKitExtensionRequest。这在模拟器中运行良好,并且在 i
当我激活我的 WatchApp InterfaceController 时。它所做的第一件事是尝试通过调用“OpenParentApplication”方法来唤醒 parentApplication(
我正在开发一个在 watch 和 iOS 父应用程序之间进行通信的应用程序。它通过打开 WatchKit 扩展将数据发送到父应用程序。我知道 openParentApplication:reply 在
我正在使用 openParentApplication:和 handleWatchKitExtensionRequest:请求并发送一个 NSNumber 对象,该对象包含来自核心位置 locatio
我为 Apple Watch 创建了一个较小的项目,以与其运行的父应用程序进行通信。 所以我在我现有的 iOS 项目中创建了一个 Watch 套件扩展,但是当它从 Watch 端调用 openpare
更新到 Xcode 7 beta 后,在运行代码行“WKInterfaceController.openParentApplication”时,我收到以下错误消息:“‘openParentApplic
我是一名优秀的程序员,十分优秀!