V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sonders
V2EX  ›  问与答

基于 Native.js 实现蓝牙打印问题请教

  •  
  •   sonders · 2022-03-09 18:11:16 +08:00 · 506 次点击
    这是一个创建于 804 天前的主题,其中的信息可能已经有所发展或是发生改变。

    框架使用的是 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 ,暂时不知道怎么来的

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:07 · PVG 13:07 · LAX 22:07 · JFK 01:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.