框架使用的是 UNI-APP ,由于使用 uniapp 找不到非 BLE 蓝牙,于是使用了 Native.js 来实现,代码如下:
const main = plus.android.runtimeMainActivity();
const Context = plus.android.importClass("android.content.Context");
const BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager);
const BAdapter = BManager.getAdapter();
console.log("BAdapter", BAdapter)
plus.android.importClass(BAdapter);
const lists = BAdapter.getBondedDevices();
console.log("lists", lists)
plus.android.importClass(lists);
// const resultDiv = document.getElementById('bluetooth_list');
const iterator = lists.iterator();
console.log("iterator", iterator)
plus.android.importClass(iterator);
while(iterator.hasNext()) {
const d = iterator.next();
plus.android.importClass(d);
this.deviceList.push({
name: d.getName(),
deviceId: d.getAddress()
})
}
// 根据以上获取到的设备地址,尝试连接
const UUID = plus.android.importClass("java.util.UUID");
const uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
var device = BAdapter.getRemoteDevice("DC:0D:30:26:CC:2A");
plus.android.importClass(device);
const bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
plus.android.importClass(bluetoothSocket);
if (!bluetoothSocket.isConnected()) {
console.log('检测到设备未连接,尝试连接....');
bluetoothSocket.connect();
}
console.log('设备已连接');
if (bluetoothSocket.isConnected()) {
console.log('设备已连接');
// 以下没有继续执行
var outputStream = bluetoothSocket.getOutputStream();
plus.android.importClass(outputStream);
var string = "打印测试\r\n";
var bytes = plus.android.invoke(string, 'getBytes', 'gbk');
outputStream.write(bytes);
outputStream.flush();
device = null //这里关键
bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误
}
代码执行到“设别已连接”后就没有继续执行了,也没有报任何错误,对 plus.android.xx 相关 API 不熟悉,uniapp 官方文档也没有详细说明,请教各位彦祖指点迷津
uuid 是固定的,似乎所有的案例中都是这个 UUID ,暂时不知道怎么来的