插件demo论坛帖示例:https://community.yonyou.com/thread-171310-1-1.html
该demo示例使用了所有的接口,比较完善,甚至可以代替蓝牙串口助手。
有关建议,bug及问题讨论等在此发帖。
cxgBluetooth 插件概述
蓝牙串口通信的基本支持。
作为客户端支持同时连接多个不同的蓝牙设备。
作为客户端支持同时连接同一个设备的不同UUID的服务。
作为服务端支持同时开启多个不同UUID服务。
允许同时作为客户端和服务端。
支持手机与手机之间的通信,支持手机与ESP32、经典蓝牙插件等下位机之间的通信。
所有发送读取数据均支持返回HEX数据。
空闲超过1秒自动发送一个心跳包,能够监听蓝牙外设主动断开。
支持多页面应用,页面刷新状态保存,设备不掉线。
该插件暂时不支持蓝牙ble。
获取当前的蓝牙状态
isEnabledBluetooth({}, callback(ret, err))
ret:
{
//当前设备是否开启蓝牙
state: true; //布尔型;true|false
}
err:
{
code: 0, //数字类型: 错误代码
//-1(未知错误)
//0(不支持蓝牙)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").isEnabledBluetooth({}, function(ret, err) {
if (!err) {
alert(ret.state);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
打开蓝牙
openBluetooth({}, callback(ret, err))
ret:
{
state: true; //布尔类型 蓝牙已经打开
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//0(没有蓝牙)
//1(未获取到activity)
//2(请求打开蓝牙)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").openBluetooth({}, function(ret, err) {
if (!err) {
alert(ret.state);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
关闭蓝牙
closeBluetooth({}, callback(ret, err))
ret:
{
state: true; //布尔类型
//true 蓝牙关闭成功
//false 蓝牙已经关闭
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").closeBluetooth({}, function(ret, err) {
if (!err) {
alert(ret.state);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
监听蓝牙的状态变化, 多次返回
listenBluetoothStatus({}, callback(ret, err))
ret:
{
status: ""; //字符串
//STATE_TURNING_ON (蓝牙正在打开)
//STATE_ON (蓝牙已经打开)
//STATE_TURNING_OFF (蓝牙正在关闭)
//STATE_OFF (蓝牙已经关闭)
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").listenBluetoothStatus({}, function(ret, err) {
if (!err) {
alert(ret.status);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
获取已经配对的设备
bondedDevices({}, callback(ret, err))
ret:
{
//数组 已经配对的设备
data: [
{
name: "", //字符串 蓝牙名称
address: "" //字符串 蓝牙地址
}
];
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").bondedDevices({}, function(ret, err) {
if (!err) {
alert(JSON.stringify(ret.data));
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
是否正在搜索设备
isScanning({}, callback(ret, err))
ret:
{
state: true; //布尔类型 true|false
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").isScanning({}, function(ret, err) {
if (!err) {
alert(ret.state);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
扫描周边设备
scan({}, callback(ret, err))
ret:
{
//返回搜索到的设备, 会多次返回
data: {
name:"", //蓝牙名称
address:"" //蓝牙地址
},
//搜索完成后, data 返回字符串 "ACTION_DISCOVERY_FINISHED"
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//0(当前未打开蓝牙)
//1(请授予相关权限)
//2(请手动开启位置信息, 否则不能搜索蓝牙设备!)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").scan({}, function(ret, err) {
if (!err) {
if (ret.data == "ACTION_DISCOVERY_FINISHED") {
alert("搜索完成");
} else {
alert(JSON.stringify(ret.data));
}
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
停止扫描周边设备
stopScan({}, callback(ret, err))
ret:
{
state: true; //布尔类型 只有true
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothBase").stopScan({}, function(ret, err) {
if (!err) {
alert(ret.state);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
作为客户端连接到设备,回调函数多次返回
connect({params}, callback(ret, err))
address:
UUID:
ret:
{
data: true; //布尔类型true 连接成功
//布尔类型false 断开连接
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//5(该客户端已连接)
//11(创建socket失败)
//12(连接失败)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothClient").connect(
{
address: "AB:35:57:57:34:02",
UUID:"00001101-0000-1000-8000-00805F9B34FB"
},
function(ret, err) {
//多次返回
if (!err) {
if (ret.data === true) {
alet("连接成功");
}
//设备断开
if (ret.data.disconnectAddress) {
alet("断开连接成功");
}
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
回调函数多次返回
Android 系统
可提供1.0.0及更高的版本
断开连接
disconnect({params}, callback(ret, err))
address:
UUID:
ret:
{
data: true; //布尔类型 true:断开成功
//false, 已经断开
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothClient").disconnect({
address: "AB:35:57:57:34:02",
UUID:"00001101-0000-1000-8000-00805F9B34FB"
}, function(ret, err) {
if (!err) {
alert("断开连接成功");
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
发送数据
sendData({params}, callback(ret, err))
address:
UUID:
data:
isHex:
charset:
ret:
{
data: true; //波尔类型 发送成功
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//11(参数解析失败)
//12(发送失败, 已断开连接)
//13(未获取到socket, 已断开连接)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothClient").sendData(
{
address: "AB:35:57:57:34:02",
UUID:"00001101-0000-1000-8000-00805F9B34FB",
data: "hello word",
isHex:false,
// data: "0100AABB",
// isHex:true
},
function(ret, err) {
if (!err) {
alert("发送成功");
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
Android 系统
可提供1.0.0及更高的版本
设置读取数据回调,多次返回
setReadDataCallback({params}, callback(ret, err))
address:
UUID:
bufferSize:
isReturnHex:
isNoReturnData:
returnStrCharset:
ret:
{
data: "";
//字符串 读取到的数据
//布尔类型true, 表示设置回调成功
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//11(未连接到蓝牙设备)
//21(读取线程获取输入流失败)
//22(读取数据失败, 连接已断开)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothClient").setReadDataCallback(
{
address: "AB:35:57:57:34:02",
UUID:"00001101-0000-1000-8000-00805F9B34FB",
bufferSize: 1024,
isReturnHex: false,
isNoReturnData: false,
},
function(ret, err) {
if (!err) {
if (ret.data === true) {
alert("设置成功);
return;
}
alert(ret.data);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
在设备连接成功后,手机会每秒自动向设备发送”\0”空字符,来进行心跳检测。
回调多次返回, 刷新页面时需要重新设置回调。
Android 系统
可提供1.0.0及更高的版本
同步已连接的客户端数据, 用于刷新页面初始化
syncClientsInfo({}, callback(ret, err))
ret:
{
data: [
{
name:"",//蓝牙名称
address:"",//蓝牙地址
UUID:"",//服务UUID
isReturnHex:false,//上次设置的读取数据是否返回hex数据
isServerClient:false,//是否为服务端被动连接的客户端, 这里一定是false
readBufferSize:1024,//上次设置的读取数据的单次读取大小
}
]
//客户端信息, 用于页面初始化
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothClient").syncClientsInfo(
{
},
function(ret, err) {
if (!err) {
//具体使用方法见demo
alert(JSON.stringify(ret.data));
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
服务端信息, 刷新页面时获取数据来初始化
Android 系统
可提供1.0.0及更高的版本
开启蓝牙服务, 多次返回
startServer({params}, callback(ret, err))
isNewStartServer:
Server_UUID:
ret:
{
data: true; //布尔类型 true:开启成功
//返回Object {
// name:"",
// address:""
//} 连接的设备
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//21(创建服务失败)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothServer").startServer({
isNewStartServer: false,
Server_UUID:"00001101-0000-1000-8000-00805F9B34FB"
}, function(ret, err) {
if (!err) {
if (ret.data === true) {
alert("创建服务成功");
}
if (typeof ret.data == "object") {
alert(JSON.stringify(ret.data));
}
if (ret.data.disconnectAddress){
alert("外设断开");
}
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
回调多次返回, 刷新页面时需要重新设置回调。
Android 系统
可提供1.0.0及更高的版本
停止蓝牙服务
stopServer({params}, callback(ret, err))
isRemove:
Server_UUID:
ret:
{
data: true; //布尔类型 true:开启成功
//false:服务不存在
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothServer").stopServer({
isRemove: false,
Server_UUID:"00001101-0000-1000-8000-00805F9B34FB"
}, function(ret, err) {
if (!err) {
alert("服务关闭");
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
服务端主动断开连接
disconnectServerClient({params}, callback(ret, err))
Server_UUID :
ret:
{
data: true; //布尔类型 true:断开成功
//false, 已经断开
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothClient").disconnectServerClient({
Server_UUID:"00001101-0000-1000-8000-00805F9B34FB"
}, function(ret, err) {
if (!err) {
alert("断开连接成功");
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
});
Android 系统
可提供1.0.0及更高的版本
发送数据
sendDataServerClient({params}, callback(ret, err))
address:
Server_UUID:
data:
isHex:
charset:
ret:
{
data: true; //波尔类型 发送成功
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//5(蓝牙设备未连接)
//11(参数解析失败)
//12(发送失败, 已断开连接)
//13(未获取到socket, 已断开连接)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothServer").sendDataServerClient(
{
Server_UUID:"00001101-0000-1000-8000-00805F9B34FB",
data: "hello word",
isHex:false
},
function(ret, err) {
if (!err) {
alert("发送成功");
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
Android 系统
可提供1.0.0及更高的版本
读取数据回调,多次返回
setReadDataCallbackServerClient({params}, callback(ret, err))
Server_UUID:
bufferSize:
isReturnHex:
isNoReturnData:
returnStrCharset:
ret:
{
data: "";
//字符串 读取到的数据
//布尔类型true, 表示设置回调成功
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
//11(未连接到蓝牙设备)
//21(读取线程获取输入流失败)
//22(读取数据失败, 连接已断开)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothServer").setReadDataCallbackServerClient(
{
Server_UUID:"00001101-0000-1000-8000-00805F9B34FB",
bufferSize: 1024,
isReturnHex: false,
isNoReturnData: false,
returnStrCharset: "UTF-8"
},
function(ret, err) {
if (!err) {
if (ret.data === true) {
alert("设置成功);
return;
}
alert(ret.data);
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
在设备连接成功后,手机在空闲(既没发送数据,又没接收到数据)超过1s时自动向设备发送”\0”空字符,来进行心跳检测。
回调多次返回, 刷新页面时需要重新设置回调。
Android 系统
可提供1.0.0及更高的版本
同步服务端数据,用于刷新页面初始化
syncServersInfo({}, callback(ret, err))
ret:
{
data: [
{
isServerRun:false,
Server_UUID:"",
//被连接的客户端信息, 复用客户端对象
client:{
name:"",//蓝牙名称
address:"",//蓝牙地址
UUID:"",//服务UUID
isReturnHex:false,//上次设置的读取数据是否返回hex数据
isServerClient:true,//是否为服务端被动连接的客户端, 这里一定是true
readBufferSize:1024,//上次设置的读取数据的单次读取大小
}
}
]
//服务端信息, 用于页面初始化
}
err:
{
code: 0, //数字类型;
//错误码:
//-1(未知错误)
msg:"" //字符串类型;
//对应错误码的错误信息
}
api.require("cxgBluetoothServer").syncServersInfo(},
function(ret, err) {
if (!err) {
// 具体使用方法见demo
alert(JSON.stringify(ret.data));
} else {
alert("code: " + err.code + " msg: " + err.msg);
}
}
);
服务端信息, 刷新页面时获取数据来初始化
Android 系统
可提供1.0.0及更高的版本