我试图在Monotouch应用程序中使用Star Micronics TSP650II打印机打印标签。
问题是session.OutputStream.HasSpaceAvailable()
总是返回false。我错过了什么?
我已经使用了C#代码(为简单起见):
var manager = EAAccessoryManager.SharedAccessoryManager;
var starPrinter = manager.ConnectedAccessories.FirstOrDefault (p => p.Name.IndexOf ("Star") >= 0); // this does find the EAAccessory correctly
var session = new EASession (starPrinter, starPrinter.ProtocolStrings [0]); // the second parameter resolves to "jp.star-m.starpro"
session.OutputStream.Schedule (NSRunLoop.Current, "kCFRunLoopDefaultMode");
session.OutputStream.Open ();
byte[] toSend = GetInitData(); // this comes from another project where the same printer with ethernet cable was used in a windows environment and worked, not null for sure
if (session.OutputStream.HasSpaceAvailable()) {
int bytesWritten = session.OutputStream.Write (toSend, (uint)stillToSend.Length);
if (bytesWritten < 0) {
Debug.WriteLine ("ERROR WRITING DATA");
} else {
Debug.WriteLine("Some data written, ignoring the rest, just a test");
}
} else
Debug.WriteLine ("NO SPACE"); // THIS ALWAYS PRINTS, the output stream is never ready to take any output
更新: 我能够通过将Star Micronics iOS SDK绑定到我的项目来解决这个问题,但这不太理想,因为它为包装添加了700K,以便在没有绑定的情况下工作。
更新2: 我一直在收到绑定代码的请求。我仍然强烈建议您尝试找出蓝牙连接,而不是使用绑定,但对于那些勇敢的人,here it is。
答案 0 :(得分:0)
你说this does find the EAAccessory correctly
如果会话实际上为空,这可能是OutputStream
返回false的原因吗?
最诚挚的问候,
明星支持
答案 1 :(得分:0)
这是Star Micronics的软件集成工程师Kale Evans。
虽然Apple的EADemo没有显示这一点,但下面的代码对于打印到EAAccessory很重要。(注意,下面的代码是Objective-C示例)。
if ([[_session outputStream] hasSpaceAvailable] == NO)
{
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
这为操作系统提供了处理所有输入源的时间。