![](/img/trans.png)
[英]com.google.GCKError Code=2 when connecting to ChromeCast device
[英]Connecting/disconnecting to/from an Chromecast Device with Swift
我最近开始使用Apple新语言Swift开发和Chromecast应用程序。 但是我一直坚持与Chromecast设备建立连接。 到目前为止,它可以做什么,它可以在网络上看到Chromecast。 之后,将出现一个AlertController(AlertController与ActionSheet相同)之所以使用AlertController,是因为Apple不赞成使用ActionSheet。 起初,我认为这是ActionSheet使其无法正常工作的原因。 之后,我尝试分配不同版本的ActionController / ActionSheet,但到目前为止还没有运气。作为在Swift中创建此代码的参考,我使用了Google Cast示例应用,这是Objective C中的功能。https://github.com/ googlecast / CastHelloText-ios
- 更新 -
Alertcontroller弹出窗口后,我单击一个正在连接的设备并成功。 当我尝试断开连接时,它给我一个异常错误“ 在展开可选值时意外发现nil ”。 我在这行代码中收到此错误。
self.mediaInformation.metadata.stringForKey(kGCKMetadataKeyTitle)
所以基本上说的是mediaInformation = nil,
self.mediaInformation.metadata.stringForKey(kGCKMetadataKeyTitle!)
所以我认为可以将其设为可选,但这没用。 有谁知道为什么它不起作用?
func chooseDevice() {
if selectedDevice == nil {
let alertController = UIAlertController(title: "Choose an device..", message: "Click on your chromecast!", preferredStyle: .ActionSheet)
for device in deviceScanner.devices {
alertController.addAction(UIAlertAction(title: device.friendlyName, style: .Default, handler: { alertAction in
self.selectedDevice = device as GCKDevice
self.connectToDevice()
}))
}
let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in
alertController.dismissViewControllerAnimated(true, completion: nil)
})
// Add action to the controller
alertController.addAction(addCancelAction)
// Finaly present the action controller
presentViewController(alertController, animated: true, completion: nil)
}
else {
updateButtonStates()
var mediaTitle = GCKMediaInformation()
mediaTitle.metadata.stringForKey(self.textFieldUrl.text)
let alertController = UIAlertController(title: "Casting to: \(selectedDevice.friendlyName)", message: nil, preferredStyle: .ActionSheet)
let addDisconnectingAction = UIAlertAction(title: "Disconnect device", style: .Destructive, handler: { alertAction in
println("De waarde van mediaInformation is: \(self.mediaInformation)")
if self.mediaInformation != nil {
(self.mediaInformation != nil ? 1 : 0)
alertController.dismissViewControllerAnimated(true, completion: nil)
println("the else UIAlertController")
}
})
let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in
println("De waarde van mediaInformation is: \(self.mediaInformation)")
if self.mediaInformation != nil {
(self.mediaInformation != nil ? 2 : 1)
alertController.dismissViewControllerAnimated(true, completion: nil)
println("else uiactionsheet")
}
})
alertController.addAction(addDisconnectingAction)
alertController.addAction(addCancelAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
这就是我与Chromecast建立连接的方式。 在connectToDevice()
或deviceManagerDidConnect()
可能有问题吗? 令人讨厌的是,我在deviceManagerDidConnect()
从未收到消息“已连接”
func connectToDevice() {
if selectedDevice != nil {
var info = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String
deviceManager = GCKDeviceManager(device: selectedDevice, clientPackageName: info)
NSLog("De waarde van info: \(info)")
NSLog("De waarde van deviceManager in connectToDevice() is: \(deviceManager)")
deviceManager = GCKDeviceManager(device: deviceScanner.devices[0] as GCKDevice, clientPackageName: info)
deviceManager.delegate = self
deviceManager.connect()
}
}
func deviceManagerDidConnect(deviceManager: GCKDeviceManager!) {
NSLog("Connected!")
updateButtonStates()
deviceManager.launchApplication(kReceiverAppID)
}
我认为您需要在处理程序中执行一些操作,以使UIAlertAction设置self.selectedDevice
例如
for selectedDevice in self.deviceScanner.devices {
alertController.addAction(UIAlertAction(title: selectedDevice.friendlyName, style: .Default, handler: { action in
self.selectedDevice = device
self.connectToDevice()
}))
}
如果您不投射任何媒体,则媒体标题将为nil,请按以下方式使用它:
宣言:
var mediaInformation : GCKMediaInformation?
用法:
let mediaTitle = self.mediaInformation?.metadata.stringForKey(kGCKMetadataKeyTitle)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.