
我最近制作了一个应用程序,用于连接打印机以通过蓝牙进行打印,我觉得Internet上该区域没有很多东西,所以写一篇文章来保存文件.
因为我也是第一个使用蓝牙功能的人,所以我从各种百度开始,最后找到了由大神编写的名为BLEPrinter的蓝牙库. 一旦了解了原理,就可以直接使用该项目.
第一步是连接打印机. 如果您在此步骤中使用库,则实际上没有什么可说的. 只需根据实际需要调用库中的方法即可. 上图:

库中的方法
好的,打印机已经连接好了,那么要打印的数据从哪里来?由于Aurora已集成到该项目中,因此后台将通过Aurora自定义消息发送订单号. 因此,我向在Aurora中接收到自定义消息的代理添加了一条通知,然后编写了代码以在连接到打印机的接口中接收该通知和通知方法. 上面的代码:


appDelegate

在用于连接打印机的界面中
接下来,实现startPrintOrder: 方法. 库中已经提供了打印数据的方法. 因为通过定制消息获得的所有信息都是订单号,所以我仍然需要通过请求接口来获取订单的订单详细信息. 获取订单详细信息后,您需要排版打印数据. 在查看了库之后,排版所需的指令集已被封装,可以根据需要进行修改. 顺便说一句,在我的项目中,打印机具有裁切功能,因此需要裁切的指令集,百度很久没找到了,然后由Android交给了我. 为了其他人的方便运行连接打印机,我在这里发布它:

切割指令集
调用打印方法以打印出排版数据:


库中的方法
这时,打印功能几乎完成. 请对其进行测试,因为自定义消息方法只能在前台运行应用程序时使用,因此在打印机成功连接到前台的应用程序之后,在收到订单后,您可以立即打印出订单详细信息. 当应用程序在后台运行时,在收到订单后不会立即打印订单详细信息,但会等待应用程序返回到前台. 如果此时蓝牙打印机没有断开连接,它将在后台“订单详细信息”中打印出所有收到的订单.
好,完成后,转到产品提交任务. 产品说: 否,它要求应用在后台收到订单时进行打印,并打印手机锁屏. 好的,现在开始考虑假脱机.
使用Android讨论背景. 当应用程序处于前台时,订单号通过一条自定义消息发送;当应用程序在后台运行时,订单号通过通知发送. 所以问题来了,后台如何知道应用程序是在前台还是在后台?调整界面.
背景提供了一个界面,让我在前景中传递1,进入背景,传递0,所以我在appDelegate中:


前台和后台的代理商
然后向代理添加一个通知,告知Aurora接收到通知消息的内容:

appDelegate
然后,您可以像自定义消息一样在连接到打印机的接口中实现相应的通知方法. 但是,该过程现在很清楚. .
由于只能在真实计算机上测试蓝牙功能,因此我通过连接到数据线的xcode在真实计算机上运行程序. 在测试了前景的功能之后,我继续测试背景是否可以打印. 好吧,这个断点来了,那个方法来了,事实证明这根本没问题. 因此,我将该程序提交给Tester进行测试. 后来,测试给了我反馈: iOS前端打印还可以,后台打印不好,Android可以.
我吗? ? ?显然,我自己进行测试时没有问题. 因此,我使用xcode连接到要运行的真实计算机,所有方法都应该消失了. 为什么我不能通过考试?后来,我发现真正的机器独立运行程序,连接打印机,将应用程序切换到后台或直接锁定屏幕,下订单,接收通知并且不打印. 但是,当真实计算机独立运行时,如何查看错误消息?因此,我陷入了一个无休止的循环,连接的线路运行没有问题,真实机器独立运行存在问题,但是我看不到问题. .

在
期间
,我查看了很多有关蓝牙背景模式的文章. 蓝牙背景模式的键和模式已在项目中设置,但仍然无法使用. 后来,我被说服让用户单击通知以返回到应用程序,然后进行打印. 我尝试过这个. 此方法不能满足需要. 我发现当我单击通知以返回到应用程序时,其他应用程序的通知将消失,而我位于该通知中. 您只能获取该通知中包含的订单号. 假设在后台收到了一些订单,但是我单击了某个通知,只打印了单击的通知的顺序. 其他命令消失了运行连接打印机,GG. 有人还猜测该程序是否在后台被杀死,因此我添加了来自百度的代码,该代码在后台继续运行了三分钟,发现它在三分钟内仍然无法打印. 无奈,无奈,使用xcode调试后台打印,代码正在运行,只要在真实机器上进行独立测试就行不通,无论哪一步有问题,您都看不到.
后来,我与几个iOS朋友讨论了很长时间. 他们认为我会在后台实现请求接口(获取订单号以请求订单数据),对打印数据进行排版,然后将打印指令发送给打印机进行打印(也是一个异步过程),这不太可能,Apple手机将不允许后台应用程序执行许多操作. 但是我的蓝牙后台模式所需的配置已全部完成. 蓝牙后台模式可以做什么?更重要的是,为什么xcode在连接的线路上运行假脱机?这是因为xcode在连接的线中运行假脱机,所以我一直认为这是我的代码有问题. 我觉得我很受委屈. .
已经折腾了半个月,真的没有出路,所以我把这个问题交给了上级. 上级后来给了我答案. 他检查了信息,发现iOS应用程序的后台蓝牙已很长时间连接到蓝牙设备. 这确实是可以实现的. 但是此蓝牙设备需要支持心跳机制,并且正是蓝牙设备将消息发送到应用程序. 如果该应用将消息发送到蓝牙设备,则实现起来并不容易. 好的,最终结果是未完成iOS后台打印功能,仅支持前台. 最近几个月困扰我的终于过去了.
在文章结尾,仍然存在一个尚未解决的问题: xcode在连接了线路的真实计算机上运行该应用程序,并且后台打印的原因也没有问题. 可能是它通过xcode运行. 我真的有机会为此应用程序提供足够的内存,所以没有问题. 但是,如果真正的机器独立运行,它将无法正常工作.
后来,我将程序更改为仅在前台打印,是的,这就是分隔线之前的内容. 我之所以写这篇文章,是希望如果有人能满足我的相同需求,那么这篇文章可以对您有所帮助,至少不要长时间在后台为我打印那段愚蠢的侵权行为,看着Android可以顺利执行后台打印,我的眼睛是红色的. 最后,如果我在本文中有任何错误,请告诉我;如果您已经实现了iOS背景打印,那么您必须告诉我,让我参考您的实现方法. (叹气)让我们一起努力!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-256820-1.html
包装都啥时候的了
用经济手段瓦解北约和美欧联盟围堵中国战略