Gut*_*iro 1 bluetooth xamarin.ios external-accessory xamarin
有人知道如何在 Xamarin.iOS 上使用 ExternalAccessory API 吗?
我的 Xamarin Studio 版本是 4.0.12(build 3),Xamarin.Android 版本 4.8.1,Xamarin.iOS 版本 6.4.5.0 和 Xcode 是版本 5.0 (5A1413),我尝试同时针对 6.1 和 7.0 iPad/iPhone。
我已经上网了,没有太多的文档。甚至 MonoTouch 文档也有断开的链接。
我想要的是,列出连接的蓝牙设备,按名称获取其中一个,然后连接到它,这样我就可以打开一个套接字并开始向它发送数据。它是一种使用串行通信的设备,是的,它具有 Apple 外部附件协议 ID。
我试过这个:
var am = EAAccessoryManager.SharedAccessoryManager;
Run Code Online (Sandbox Code Playgroud)
它只是向我抛出一个异常 InvaidCastException。
有什么线索吗?
谢谢!我真的很感谢你的帮助。
PS:Xamarin 详细信息
Xamarin Studio
Version 4.0.12 (build 3)
Installation UUID: 7348d641-ed6d-4c8a-b59a-116674e06dfd
Runtime:
Mono 3.2.0 ((no/7c7fcc7)
GTK 2.24.20
GTK# (2.12.0.0)
Package version: 302000000
[...]
Apple Developer Tools
Xcode 5.0 (3332.25)
Build 5A1413
[...]
Xamarin.iOS
Version: 6.4.5.0 (Trial Edition)
Hash: 1336a36
Branch:
Build date: 2013-10-09 11:14:45-0400
Build Information
Release ID: 400120003
Git revision: 593d7acb1cb78ceeeb482d5133cf1fe514467e39
Build date: 2013-08-07 20:30:53+0000
Xamarin addins: 25a0858b281923e666b09259ad4746b774e0a873
Operating System
Mac OS X 10.8.5
Darwin Gutembergs-MacBook-Pro.local 12.5.0 Darwin Kernel Version 12.5.0
Mon Jul 29 16:33:49 PDT 2013
root:xnu-2050.48.11~1/RELEASE_X86_64 x86_64
Run Code Online (Sandbox Code Playgroud)
虽然看起来你已经解决了这个问题,但我想我会展示一些显示基础知识的代码片段(在这种情况下连接到 Sphero 并将其变成绿色):
EAAccessoryManager mgr = EAAccessoryManager.SharedAccessoryManager;
var accessories = mgr.ConnectedAccessories;
foreach(var accessory in accessories)
{
myLabel.Text = "Got me an accessory";
Console.WriteLine(accessory.ToString());
Console.WriteLine(accessory.Name);
var protocol = "com.orbotix.robotprotocol";
if(accessory.ProtocolStrings.Where(s => s == protocol).Any())
{
myLabel.Text = "Got me a Sphero";
var session = new EASession(accessory, protocol);
var outputStream = session.OutputStream;
outputStream.Delegate = new MyOutputStreamDelegate(myLabel);
outputStream.Schedule(NSRunLoop.Current, "kCFRunLoopDefaultMode");
outputStream.Open();
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class MyOutputStreamDelegate : NSStreamDelegate
{
UILabel label;
bool hasWritten = false;
public MyOutputStreamDelegate(UILabel label)
{
this.label = label;
}
public override void HandleEvent(NSStream theStream, NSStreamEvent streamEvent)
{
if(streamEvent == NSStreamEvent.HasSpaceAvailable && ! hasWritten)
{
//Set the color of the Sphero
var written = ((NSOutputStream)theStream).Write(new byte[] {0xFF, 0xFF, 0x02, 0x20, 0x0e, 0x05, 0x1F, 0xFF, 0x1B, 0x00, 0x91}, 11);
if(written == 11)
{
label.Text = "Sphero should be green";
}
hasWritten = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3909 次 |
最近记录: |