我正在为我的项目将Swift代码移植到Xamarin。每次调用此函数时,它都会失败,并且附件选择器对话框不会显示。
EAAccessoryManager.SharedAccessoryManager.ShowBluetoothAccessoryPicker(谓词,完成)
以下是我确认的一些事情:
- BT收音机打开
- Info.plist具有支持的外部附件协议
- 已尝试确保在UI线程上完成调用
- 尝试直接从按钮单击事件调用
- Swift/Xcode中相同的基本代码运行良好
- 确保在本文的构建选项中选择了ARMv7和ARM64:iPad Air-CoreBluetooth[错误]取消选择器,因为我们不能';t使用蓝牙通信
Xamarin:
EAAccessoryManager.SharedAccessoryManager.ShowBluetoothAccessoryPicker(null, completion: ((Foundation.NSError error) => {
Console.WriteLine("My callback");
if (error != null) {
Console.WriteLine(String.Format("Error code: {0} Desc: {1}", error.Code, error.DebugDescription));
Console.WriteLine("Failed? " + EABluetoothAccessoryPickerError.Failed.ToString());
Console.WriteLine("Failed? " + Convert.ToInt64(EABluetoothAccessoryPickerError.Failed));
}
}));
Xcode/Swift:
EAAccessoryManager.sharedAccessoryManager().showBluetoothAccessoryPickerWithNameFilter(nil) { (error) -> Void in
if error != nil {
NSLog("Error code: (error!.code) (error.debugDescription)")
}
}
Xamarin代码不会显示选择器,并且总是会失败。
2016-04-05 19:54:02.136 ASGDemo.iOS[6383:2146384] Connect Clicked
2016-04-05 19:54:06.139 ASGDemo.iOS[6383:2146384] BTM: attaching to BTServer
2016-04-05 19:54:09.157 ASGDemo.iOS[6383:2146384] BTM: session attach called back with BT_SESSION_ATTACHED (fffffed0)
2016-04-05 19:54:09.158 ASGDemo.iOS[6383:2146384] BTM: attemping to re-attach in 1 seconds
2016-04-05 19:54:09.242 ASGDemo.iOS[6383:2146384] My callback
2016-04-05 19:54:09.250 ASGDemo.iOS[6383:2146384] Error code: 3 Desc: Error Domain=EABluetoothAccessoryPickerErrorDomain Code=3 "(null)"
2016-04-05 19:54:09.253 ASGDemo.iOS[6383:2146384] Failed? Failed
2016-04-05 19:54:09.254 ASGDemo.iOS[6383:2146384] Failed? 3
Xamarin的好心人直接帮助了我,所以我在这里发布了解决方案。他们说这是一个已经修复的错误。更新应在本月晚些时候通过自动更新发布(如果您已启用)。
目前,他们提供了一个变通方法,我已经验证了它可以为我和我的同事在我们的项目中工作。以下是解决方法的步骤:
- 清理项目
- 取消选中"iOS Build"部分下项目选项中的"Enable device specific builds"
- 从设备中删除旧应用程序
- 现在,重建/重新部署,它应该可以工作了
感谢大家的建议和帮助。同时,也要感谢Xamarin的员工们的迅速响应。