Bluetooth连接蓝牙热敏打印机打印
Bluetooth连接蓝牙热敏打印机打印收银小票功能 步骤如下
1、添加必要权限
在 Info.plist
文件中添加以下权限:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>我们需要访问蓝牙来连接打印机</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>我们需要访问蓝牙来连接打印机</string>
2、检查蓝牙状态
// 检查状态
DPBLEManager.shared().startCheckStatus { central in
if central.state == .poweredOn {
// 扫描蓝牙
} else {
print("Bluetooth is not available.")
}
}
各状态的详细说明
.unknown
- 描述:初始状态,表示管理器的状态尚未确定。
- 原因:通常是刚初始化
CBCentralManager
时的状态。
.resetting
- 描述:蓝牙硬件正在重置。
- 原因:系统正在进行内部重置,通常不需要特别处理,等待重置完成即可。
.unsupported
- 描述:设备不支持蓝牙低功耗(BLE)功能。
- 原因:设备硬件不支持 BLE,或者操作系统版本太低。
.unauthorized
- 描述:应用程序没有权限使用蓝牙。
- 原因:用户拒绝了应用程序的蓝牙权限,或者应用程序没有在
Info.plist
中声明必要的权限。
.poweredOff
- 描述:蓝牙已关闭。
- 原因:用户在设置中关闭了蓝牙,或者设备的蓝牙硬件被禁用。
.poweredOn
- 描述:蓝牙已开启并且可以使用。
- 原因:蓝牙硬件正常工作,应用程序可以开始扫描和连接蓝牙设备。
3、搜索可用蓝牙外设
// 热敏打印机的蓝牙服务ID, 一般为 18F0 ,具体根据打印机文档确定
var printerServiceUUIDs:Array<CBUUID> = [CBUUID(string: "18F0")]
// 开始扫描蓝牙
DPBLEManager.shared().scan(self.printerServiceUUIDs) { central, peripheral, advertisementData, rssi in
// 打印机名称
let deviceName = peripheral.name ?? "Unknown Device"
}
4、连接蓝牙外设
DPBLEManager.shared().connect(peripheral, options: nil, stopScanAfterConnected: true, serviceUUIDs: printerServiceUUIDs, characteristicUUIDs: nil) { stage, peripheral, service, character, error in
switch stage {
case .connectStart:
// 开始连接
break
case .connectFail:
// 连接失败
break
case .connectSuccess:
// 蓝牙连接成功
break
case .seekService:
// 搜索服务
print("打印机服务\(peripheral.services ?? [])")
break
case .seekCharacteristic:
// 搜索特性
print("服务特性\(String(describing: service?.characteristics))")
break
case .seekDescriptors:
// 搜索描述
print("服务描述\(String(describing: character?.description))")
break
}
}
5、写入数据
let command:DPEscCommand = DPEscCommand()
command.appendText("单据标题",alignment: .center,fontSize: .titleHMiddle, fontStyle: .bold)
command.appendText("地址:金翠芳")
command.appendText("下单时间:2024-22-06 14:27:24")
command.appendSeparatorLine()
command.appendText("商品名称", middle: "数量", right: "金额", isTitle: true)
command.appendSolidLine()
command.appendText("香菇饭", middle: "2", right: "28")
command.appendSolidLine()
command.appendText("合计金额", value: "100",titleFontStyle: .bold, valueFontStyle: .bold)
command.appendDottedLine()
command.appendSolidLine(withText: "二维码")
// 如果打印机支持打印二维码
// command.appendQRCode(withInfo: "https://www.baidu.com/", size: 7)
// 如果打印机不支持打印二维码,以打印图片代替
command.appendQRImgCode(withInfo: "https://www.baidu.com/",maxWidth: 264)
command.appendSolidLine(withText: "公众号", symbol: "&")
// 打印图片
command.appendImage(UIImage(named: "gong_zhong_hao"))
// 切纸
command.printCutPaper(.full, num: 5)
// 写入数据
DPBLEManager.shared().writeValue(data)