鸿蒙纯血ArkTS经典蓝牙(SPP)
准备工作
1,开发工具升级一下,版本太低有部分api可能会无法使用,目前我的版本是
DevEco Studio 6.0.0 beta5
2,参考官方文档
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/spp-development-guide
3,测试设备鸿蒙5.0以上的系统的手机当中心设备,随便打印机当外设
进入开发(喜欢研究的看)
demo地址
https://gitee.com/xzw421771880/arkts-spp
1,蓝牙权限
(module.json5文件添加)
"requestPermissions": [{"name" : "ohos.permission.ACCESS_BLUETOOTH","reason": "$string:spp_bluetooth","usedScene": {"abilities": ["FormAbility"],"when":"inuse"}},
]
代码处
// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();//requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗atManager.requestPermissionsFromUser(context, permissions).then((data) => {let grantStatus: Array<number> = data.authResults;let length: number = grantStatus.length;for (let i = 0; i < length; i++) {console.log("权限------",grantStatus[i]);if (grantStatus[i] === 0) {// 用户授权,可以继续访问目标操作} else {// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限return;}}// 授权成功}).catch((err: BusinessError) => {console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);})
}
2,蓝牙初始化
/*** 初始化*/spp_openBluetoothAdapter() {this.blueDeviceList = [];console.log("spp_openBluetoothAdapter--------------");const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;reqPermissionsFromUser(permissions, context);}
3,扫描蓝牙
/*** 扫描*/spp_startBluetoothDevicesDiscovery(callback:(data: Array<connection.DiscoveryResult>) => void){try {connection.on('discoveryResult', (data: Array<connection.DiscoveryResult>)=>{if ((!this.blueDeviceList.some(item => item.deviceId === data[0].deviceId)) && data[0].deviceName !== '') {this.blueDeviceList.push(data[0])callback(this.blueDeviceList);}});} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}try {// 判断本机设备是否正在进行扫描let scan = connection.isBluetoothDiscovering();if (!scan) {// 若当前不处于扫描过程,则开始扫描设备connection.startBluetoothDiscovery();}} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}}
4,连接
/*** 连接*/spp_getConnectDevice(address:string){let peerDevice = address;// 配置连接参数let option: socket.SppOptions = {uuid: '00001101-0000-1000-8000-00805F9B34FB',//'00009999-0000-1000-8000-00805F9B34FB', // 需要连接的服务端UUID服务,确保服务端支持secure: false,type: socket.SppType.SPP_RFCOMM};console.info('startConnect ' + peerDevice);socket.sppConnect(peerDevice, option, (err, num: number) => {if (err) {console.error('startConnect errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);} else {console.info('startConnect clientNumber: ' + num);this.clientNumber = num;}});console.info('startConnect after ' + peerDevice);}
5,发送数据
/*** 发送数据*/spp_writeData(){this.sendData();}public sendData() {DataUtils.aa()console.info('sendData ' + this.clientNumber);if (this.clientNumber == -1) {console.error('invalid clientNumber');return;}// let str = "YWxhbGFsYWwNCmFsYWxhbGFsDQphbGFsYWxhbA0K";// str = "HxsaAQIDAR8bGgECBSEfGxoBAgQ6G0AcJhthAR12MAATAJYA/////////////////////////P////////////////////////z////////////////////////8/////////////////////////P////////////////////////z//////n/////////////////8//////Af/////////////////P/////wD/////////////////z/////+AP////////////////8//////4B/////////////////P//////gP////////////////z///////D////////////////8///////9f////////////////P///////v////////////////z///////8////////////////8////////3////////////////P///////9/////////n//////z/////////////////gf/////8/////////////////gD//////P////////////////gAf/////z////////////////+AH/////8////////4AAf////+v///////P///////+AAAf////r///////z///////+AAAAD///v///////8////////gAAAAA///////////P///////wAAAAAD//////////z///////8AAAAAAD////wA///8///////+AAAAAAAB///8AP///P///////AAAAAAAAP//+AB///z//////4AAAAAAAAB///B8P//8//////5gAAAAAAAAP//w/B///P////+fwAAAAAAAAD//8fwf//z/////AAAAAAAAAAA//+H+H//8/////gAAAAAAAAAAH////B///P////gAAAAAAAAAAB////w///z////wAAAAAAAAAAAP///4P//8////4AAAAAAAAAAAAf//4H///P///8AAAAAAACAAAAH//+B///z///+AAAAAAAAAAAAA//+B///8////AAAAAAAAAAAAAP//B////P///gAAAAAAAAAAAAB//w////z///wAAAAAAAAAAAAAP/4P///8///4AAAAAAAAAAAAAD/+D////P//8AAAAAAAAAAAAAAf//////z//+AAAAAAAAAAAAAAD/4////8///AAAAAf+AAAAAAAA/+H////P//gAAAAH/7AAAAAAAP/B////z//wAAAAB/AAAAAAAAB/wf///8//8AAAAH/AAAAAAA4Af+H////P/8AAAAE+AAAAAC4AAD//////z//AAAAA/AAAAAAL0AA//////8//gAAAB/AAAAAAAHgAH//////P/wAAAB/wAAAAAAA4AB+P////z/4AAAD/4AAAAAAAPAAcAAAf/8/8AAAH/8AAAAAAABwADAQAA//P/AAAB/8AAAAAAAAOAA9+AAH/z/gAAA/+gCAAYQAAAwAP/AAAP8/wAAAf/wAAAGAAAAMAD/gAAB/P8AAAL/gAAABiQAADgA/wAAAHz+AAAB/wACAAYoAAA8AP/8AAAM/AAAAf8AAAAH8AAAHAD/+AAABPwAAAP+AAAAB/AAAB4B//AAAAD4AAAG/gAAAAfwAAAeAf/gAAAA8AAAB/wAAAAH8AAADwD/wAAAAOAAAAGwAIAAB/AAAAeA/8AAAADgAAAAEAMAAA/gAAAHgP7AAAAA4AAAABAEAAAP4AAAB4B//uAAAMAAAAAADAAAD8AAAAeAf//wAACAAAAAAAgAAA/AAAAHgH///AAAgAAAAAAIAAAfwAAAA4A///wAAIAAAAAAAAAAH8AAAAeAf//+AAAAAAAAAAgAgB/AAAADAD///wAAAAAAAAAAC9g/wAAQAQB///8AAAAAAAAAAAfgP4AACAAAP///4AAAAAAAAAAv8H+AAAQAAH////gAAAAAAAAAL+B/gAAEAAA////4AAAAAAAAAA8AMAAPpAAAP////wAAAAAAAAAAAIAAH6AAAB////8AAAAAAAAAAAAAAD+QAAAf////wAAAAAAAAAAAAAB/oAAAD/////gAAAAAAAAAAAAAf6AAAB/////8AAAAAAAAAAAAAD8AAAAP////+AAAAAAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAAAAA/////8BAAAAAAAABfgAAAAAAAP/////BQAAAAAAAO//4AAAAAAH/////wcAAAAAAAH8D/gAAAAAB/////8HAAAAAAAH4AB8AAAAAAf/////JAAAAAAACQAAAQAAAAAD/////yQAAAAAAAYAAABAAAAAA/////8rAAAAAAAGAAAAMAAAAAP/////OwAAAAaD/gAAAAAAAAAD/////zsmAAA+g/4AAAAAAAAAA/////8/JoAB////AAAAAAAAAAP/////P/7AD////4AAAAIAAAAD/////z/jwD/////gAAACgAAAAf////8/7+B//////4AAA+AAAAP/////P//x///////4AANgAAAD/////z/////////////vwAAAA/////8//////////////8gAAAP/////P//////////////YAAAD/////z///////////////4AAA/////8//////////////++gAAP/////P//////////////noAAD/////z////////////////wAA/////8////////////////+AAP/////P/////////////9//wAH/////z//////////////fP+AB/////8/////////////////wAf/////P////////////////+AP/////z/////////////////gD/////8/////////////////8A//////P////////7gP//////AP/////z////////98AB/////wD/////8/////////wAB/////8B//////P////////4AAH/////Af/////z////////AAAA/////wP/////8////////wAAAf////8D//////P////////4AAD/////B//////z/////////4AAH////w//////8//////////4AB////8P//////PX////////////////H//////zw////////////////x//////88P///////////////8///////PH////////////////v//////zx////////////////z//////8/H//////L////f///////////Pwf/////wf///n///////////z8B/////+AE//j///////////8/Af/////gAAAB////////////PwD/////8AAAA////////////z8Af/////8AAD////////////8/gH///////4P/////////////P4A/////////////+f///////z7AD/////////////H///////8/wAf////////////x////////P8AH////////////w////////z/gA////////////8P///////8/4AH///////////8H////////P/gAf//////////+B////////z/oAD///////////gf/////z/8/+AAf//////////gP/////wH/P+AAH//////////4B/////4B/z/wAAf/////////8A/////wAD8/8AAD/////////+AD////wAAfP/AAAf/////////gC////4AADz/4AAB/////////wAf///4AAYM/+AAAP////////4AH///8AAfBP/wAAA////////8AB///8AAD4T/+AAAD///////4AA///+DeBjYG2EAG2EBG0UBGyEwHCEMye7b2srQx9jLv7/GvLzT0M/euavLvhtFABshABshABwhAAobYQAKG2EBHXYwACwAMgAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB4GZ+f5+GeGGB4eeeB4YYHhh+YeGBhn+Hhh+YeAZ4H5ngAAAAAB5hgH5+eYHgZn5/n4Z4YYHh554HhhgeGH5h4YGGf4eGH5h4BngfmeAAAAAAHmGAfn55geBmfn+fhnhhgeHnngeGGB4YfmHhgYZ/h4YfmHgGeB+Z4AAAAAAeYYB+fnmB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";//let uint8array = DataUtils.stringToBuffer("SIZE 40 mm,30 mm\r\nCLS\r\nPRINT 1,1\r\n");let arrayBuffer = uint8array.buffer;try {socket.sppWrite(this.clientNumber, arrayBuffer);} catch (err) {console.error('sppWrite errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}}
有疑问或后续补充+VX:Xzw421771880