由于工作需求需要用到微型蓝牙打印机,花了两天时间调试了蓝牙打印机,由于打印内容比较多,打印不完整被卡了一整天。蓝牙设备每次发送字节最好不要超过20个字节,否则会造成内容打印不完整。如果打印内容比较多需要进行拆包发送。
在这里提供IOS使用代码。
1.添加 CoreBluetooth.framework 框架,
2.导入HHBluetoothPrinterManager.h头文件
3.添加事件代理
@interface UnityAppController ()<HHBluetoothPrinterManagerDelegate,UITableViewDelegate,UITableViewDataSource>
{
}
@end
这部分完整代码
#import "HHBluetoothPrinterManager.h"
@interface UnityAppController ()<HHBluetoothPrinterManagerDelegate,UITableViewDelegate,UITableViewDataSource>
{
}
@end
@implementation UnityAppController
UnityAppController.h头文件中添加如下代码
typedef enum {
Align_Left = 0X00,
Align_Center,
Align_Right,
}Align_Type_e;
typedef enum {
Char_Normal = 0X00,
Char_Zoom_2,
Char_Zoom_3,
Char_Zoom_4
}Char_Zoom_Num_e;
typedef enum {
TICKET_SALE = 1,
TICKET_CARD,
}TYPE_TICKET;
UnityAppController.m中如下添加逻辑代码
HHBluetoothPrinterManager *manager;
//选中的设备
CBPeripheral *selectedPeripheral;
NSMutableArray *dataArray1;
NSMutableArray *sendDataArray;
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral {//扫描到的设备
NSLog(@"扫描到的设备%@",peripheral);
[dataArray1 addObject:peripheral];
selectedPeripheral=peripheral;
[manager connectPeripheral:peripheral];
}
extern "C"{
void __connectBluetooth (){
NSLog(@"开始扫描");
[manager scanPeripherals];
}
void __printText (const char * tag){
NSString *tagstr=[NSString stringWithUTF8String:tag];
NSLog(@"___printText=%@",tagstr);
//printText(tagstr);
NSString * str=@"都是空房间都是浪费到了房间开都是浪费是非得失理发店萨芬的分开打死了发多少立方第三方的首付款老地方懒得开罚单是反倒是发多少立方订房订单放大来看房打开了房间浪费就饿哦覅为分配的是否我发的反垄断法地方了看电视放大来看房价未分配代理费第三方多少了发票违法违法的酸辣粉当时的历史防静电服都是浪费代理费地方记录的开发及违法排污费 第三方的快速访问;平凡的死了地方记录我丰富多少了房间都是来看反倒是附件是大家访客里无法分解了独守空房都是浪费独守空房的律师费的律师费的发的反垄断法的看法的房间的李开复剪短发了对方的浪费订房代理费贷款纠纷第六课丰富赖伟峰收废品的身份登记法律都是付款了贷款是否的律师费代理商客服代理商放大了师傅都是分为平凡的披萨佛的商品房的拍摄佛挡杀佛都是浪费第三方第三方额的房间都是放大看手机放假了电视剧反倒是发的是否、、、、、";
printText(str);
}
void __sendRAWData (unsigned char *data, int length){
NSData *value = nil;
if (data != nil)
value = [[NSData alloc] initWithBytes:data length:length];
printData(value);
}
}
void printText(NSString* tagstr){
NSString* aStr=@"水电费水电费多少\n";
NSData* aData;
// aData = [aStr dataUsingEncoding:NSUTF8StringEncoding];
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
aData=[tagstr dataUsingEncoding: enc];
NSLog(@"data.length=%ld",aData.length);
int len=(int)[aData length];
if (len>20) {
NSData* dataTemp=[aData subdataWithRange:NSMakeRange(0, 20)];
[manager printData:dataTemp];
//这里分包发送 蓝牙发送每次不要超过20个字节
for (int i = 0; i < len / 20; i++)
{
int lenTemp = 20;
if ((len - (20 + 20 * i) < 20) && (len - (20 + 20 * i) > 0)) {//i == 1
lenTemp = len - (20 + 20 * i);
}
if (len - (20 + 20 * i) > 0){//i ==0;
dataTemp = [aData subdataWithRange:NSMakeRange(20 + 20 * i, lenTemp)];
}
[manager printData:dataTemp];
}
}
}
void printData(NSData* aData){
[manager connectPeripheral:selectedPeripheral];
int len=(int)[aData length];
if (len>20) {
NSData* dataTemp=[aData subdataWithRange:NSMakeRange(0, 20)];
[manager printData:dataTemp];
//这里分包发送
for (int i = 0; i < len / 20; i++)
{
int lenTemp = 20;
if ((len - (20 + 20 * i) < 20) && (len - (20 + 20 * i) > 0)) {//i == 1
lenTemp = len - (20 + 20 * i);
}
if (len - (20 + 20 * i) > 0){//i ==0;
dataTemp = [aData subdataWithRange:NSMakeRange(20 + 20 * i, lenTemp)];
}
[manager printData:dataTemp];
}
}
}
在(void)startUnity:(UIApplication*)application中实现数据初始化
- (void)startUnity:(UIApplication*)application
{
NSAssert(_unityAppReady == NO, @"[UnityAppController startUnity:] called after Unity has been initialized");
UnityInitApplicationGraphics();
// we make sure that first level gets correct display list and orientation
[[DisplayManager Instance] updateDisplayListInUnity];
UnityLoadApplication();
Profiler_InitProfiler();
[self showGameUI];
[self createDisplayLink];
/*******蓝牙打印数据初始化************/
manager = [HHBluetoothPrinterManager sharedManager];
manager.delegate = self;
dataArray1 = [[NSMutableArray alloc] init];//初始化
NSLog(@"初始化");
/*******蓝牙打印数据初始化************/
UnitySetPlayerFocus(1);
}