From 402d8d66a30b62f4bb3343309a089b1b2121eb26 Mon Sep 17 00:00:00 2001
From: cdk <2441919651@qq.com>
Date: 星期三, 30 七月 2025 08:30:27 +0800
Subject: [PATCH] 蓝牙模块增加安卓14以上的处理
---
lib/base_js/js/print.js | 363 +++++++++++++++++++++++++++++----------------------
1 files changed, 204 insertions(+), 159 deletions(-)
diff --git a/lib/base_js/js/print.js b/lib/base_js/js/print.js
index a9384f9..1241c1f 100644
--- a/lib/base_js/js/print.js
+++ b/lib/base_js/js/print.js
@@ -1,82 +1,119 @@
+//瀹夊崜13鍙婁互涓婂姩鎬佺敵璇疯摑鐗欐潈闄�
+function requestBluetoothPermissions() {
+ try {
+ var main = plus.android.runtimeMainActivity();
+ var Build = plus.android.importClass('android.os.Build');
+ var sdkInt = Build.VERSION.SDK_INT;
+ if (sdkInt >= 31) { // 瀹夊崜12(API 31)鍙婁互涓�
+ var permissions = [
+ 'android.permission.BLUETOOTH_SCAN',
+ 'android.permission.BLUETOOTH_CONNECT',
+ 'android.permission.BLUETOOTH_ADMIN',
+ 'android.permission.BLUETOOTH'
+ ];
+ var PermissionChecker = plus.android.importClass('androidx.core.content.ContextCompat');
+ var ActivityCompat = plus.android.importClass('androidx.core.app.ActivityCompat');
+ for (var i = 0; i < permissions.length; i++) {
+ var hasPermission = PermissionChecker.checkSelfPermission(main, permissions[i]);
+ if (hasPermission !== 0) {
+ ActivityCompat.requestPermissions(main, [permissions[i]], 1);
+ }
+ }
+ }
+ } catch (e) {
+ console.log('钃濈墮鏉冮檺鐢宠寮傚父锛�' + e);
+ }
+}
+
//address=""鎼滅储钃濈墮//address=璁惧mac鍦板潃锛岃嚜鍔ㄩ厤瀵圭粰鍑簃ac鍦板潃鐨勮澶�
function searchDevices(address) {
- //娉ㄥ唽绫�
- var main = plus.android.runtimeMainActivity();
- var IntentFilter = plus.android.importClass('android.content.IntentFilter');
- var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
- var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
- var BAdapter = BluetoothAdapter.getDefaultAdapter();
- console.log("寮�濮嬫悳绱㈣澶�");
- var filter = new IntentFilter();
- var bdevice = new BluetoothDevice();
- var on = null;
- var un = null;
- var vlist1 = document.getElementById('list1'); //娉ㄥ唽瀹瑰櫒鐢ㄦ潵鏄剧ず鏈厤瀵硅澶�
- vlist1.innerHTML = ''; //娓呯┖瀹瑰櫒
- var vlist2 = document.getElementById('list2'); //娉ㄥ唽瀹瑰櫒鐢ㄦ潵鏄剧ず鏈厤瀵硅澶�
- vlist2.innerHTML = ''; //娓呯┖瀹瑰櫒
- var button1 = document.getElementById('bt1');
- button1.disabled=true;
- button1.value='姝e湪鎼滅储璇风◢鍊�';
- BAdapter.startDiscovery(); //寮�鍚悳绱�
- var receiver;
- receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
- onReceive: function(context, intent) { //瀹炵幇onReceiver鍥炶皟鍑芥暟
- plus.android.importClass(intent); //閫氳繃intent瀹炰緥寮曞叆intent绫伙紝鏂逛究浠ュ悗鐨勨��.鈥欐搷浣�
- console.log(intent.getAction()); //鑾峰彇action
- if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED"){
- main.unregisterReceiver(receiver);//鍙栨秷鐩戝惉
- button1.disabled=false;
- button1.value='鎼滅储璁惧';
- console.log("鎼滅储缁撴潫")
- }else{
- BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
- //鍒ゆ柇鏄惁閰嶅
- if (BleDevice.getBondState() == bdevice.BOND_NONE) {
- console.log("鏈厤瀵硅摑鐗欒澶囷細" + BleDevice.getName() + ' ' + BleDevice.getAddress());
- //鍙傛暟濡傛灉璺熷彇寰楃殑mac鍦板潃涓�鏍峰氨閰嶅
- if (address == BleDevice.getAddress()) {
- if (BleDevice.createBond()) { //閰嶅鍛戒护.createBond()
- console.log("閰嶅鎴愬姛");
- var li2 = document.createElement('li'); //娉ㄥ唽
- li2.setAttribute('id', BleDevice.getAddress()); //鎵撳嵃鏈簃ac鍦板潃
- li2.setAttribute('onclick', 'print(id)'); //娉ㄥ唽click鐐瑰嚮鍒楄〃杩涜鎵撳嵃
- li2.innerText = BleDevice.getName();
- vlist2.appendChild(li2);
- }
+ requestBluetoothPermissions(); // 鏂板锛氬厛鐢宠鏉冮檺
+ try {
+ //娉ㄥ唽绫�
+ var main = plus.android.runtimeMainActivity();
+ var IntentFilter = plus.android.importClass('android.content.IntentFilter');
+ var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
+ var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
+ var BAdapter = BluetoothAdapter.getDefaultAdapter();
+ console.log("寮�濮嬫悳绱㈣澶�");
+ var filter = new IntentFilter();
+ var bdevice = new BluetoothDevice();
+ var on = null;
+ var un = null;
+ var vlist1 = document.getElementById('list1'); //娉ㄥ唽瀹瑰櫒鐢ㄦ潵鏄剧ず鏈厤瀵硅澶�
+ vlist1.innerHTML = ''; //娓呯┖瀹瑰櫒
+ var vlist2 = document.getElementById('list2'); //娉ㄥ唽瀹瑰櫒鐢ㄦ潵鏄剧ず鏈厤瀵硅澶�
+ vlist2.innerHTML = ''; //娓呯┖瀹瑰櫒
+ var button1 = document.getElementById('bt1');
+ button1.disabled=true;
+ button1.value='姝e湪鎼滅储璇风◢鍊�';
+ BAdapter.startDiscovery(); //寮�鍚悳绱�
+ var receiver;
+ receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
+ onReceive: function(context, intent) { //瀹炵幇onReceiver鍥炶皟鍑芥暟
+ plus.android.importClass(intent); //閫氳繃intent瀹炰緥寮曞叆intent绫伙紝鏂逛究浠ュ悗鐨勨��.鈥欐搷浣�
+ console.log(intent.getAction()); //鑾峰彇action
+ if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED"){
+ main.unregisterReceiver(receiver);//鍙栨秷鐩戝惉
+ button1.disabled=false;
+ button1.value='鎼滅储璁惧';
+ console.log("鎼滅储缁撴潫")
+ }else{
+ BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ //鍒ゆ柇鏄惁閰嶅
+ if (BleDevice.getBondState() == bdevice.BOND_NONE) {
+ console.log("鏈厤瀵硅摑鐗欒澶囷細" + BleDevice.getName() + ' ' + BleDevice.getAddress());
+ //鍙傛暟濡傛灉璺熷彇寰楃殑mac鍦板潃涓�鏍峰氨閰嶅
+ if (address == BleDevice.getAddress()) {
+ if (BleDevice.createBond()) { //閰嶅鍛戒护.createBond()
+ console.log("閰嶅鎴愬姛");
+ var li2 = document.createElement('li'); //娉ㄥ唽
+ li2.setAttribute('id', BleDevice.getAddress()); //鎵撳嵃鏈簃ac鍦板潃
+ li2.setAttribute('onclick', 'print(id)'); //娉ㄥ唽click鐐瑰嚮鍒楄〃杩涜鎵撳嵃
+ li2.innerText = BleDevice.getName();
+ vlist2.appendChild(li2);
+ }
+ } else {
+ if(BleDevice.getName() != on ){ //鍒ゆ柇闃叉閲嶅娣诲姞
+ var li1 = document.createElement('li'); //娉ㄥ唽
+ li1.setAttribute('id', BleDevice.getAddress()); //鎵撳嵃鏈簃ac鍦板潃
+ li1.setAttribute('onclick', 'searchDevices(id)'); //娉ㄥ唽click鐐瑰嚮鍒楄〃杩涜閰嶅
+ on = BleDevice.getName();
+ li1.innerText = on;
+ vlist1.appendChild(li1);
+
+ }
+
+ }
} else {
- if(BleDevice.getName() != on ){ //鍒ゆ柇闃叉閲嶅娣诲姞
- var li1 = document.createElement('li'); //娉ㄥ唽
- li1.setAttribute('id', BleDevice.getAddress()); //鎵撳嵃鏈簃ac鍦板潃
- li1.setAttribute('onclick', 'searchDevices(id)'); //娉ㄥ唽click鐐瑰嚮鍒楄〃杩涜閰嶅
- on = BleDevice.getName();
- li1.innerText = on;
- vlist1.appendChild(li1);
+ if(BleDevice.getName() != un ){ //鍒ゆ柇闃叉閲嶅娣诲姞
+ console.log("宸查厤瀵硅摑鐗欒澶囷細" + BleDevice.getName() + ' ' + BleDevice.getAddress());
+ var li2 = document.createElement('li'); //娉ㄥ唽
+ li2.setAttribute('id', BleDevice.getAddress()); //鎵撳嵃鏈簃ac鍦板潃
+ li2.setAttribute('onclick', 'print(id)'); //娉ㄥ唽click鐐瑰嚮鍒楄〃杩涜鎵撳嵃
+ un = BleDevice.getName();
+ li2.innerText = un;
+ vlist2.appendChild(li2);}
+ }}
- }
+ }
+ });
- }
- } else {
- if(BleDevice.getName() != un ){ //鍒ゆ柇闃叉閲嶅娣诲姞
- console.log("宸查厤瀵硅摑鐗欒澶囷細" + BleDevice.getName() + ' ' + BleDevice.getAddress());
- var li2 = document.createElement('li'); //娉ㄥ唽
- li2.setAttribute('id', BleDevice.getAddress()); //鎵撳嵃鏈簃ac鍦板潃
- li2.setAttribute('onclick', 'print(id)'); //娉ㄥ唽click鐐瑰嚮鍒楄〃杩涜鎵撳嵃
- un = BleDevice.getName();
- li2.innerText = un;
- vlist2.appendChild(li2);}
- }}
+ filter.addAction(bdevice.ACTION_FOUND);
+ filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);
+ filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);
+ filter.addAction(BAdapter.ACTION_STATE_CHANGED);
- }
- });
-
- filter.addAction(bdevice.ACTION_FOUND);
- filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);
- filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);
- filter.addAction(BAdapter.ACTION_STATE_CHANGED);
-
- main.registerReceiver(receiver, filter); //娉ㄥ唽鐩戝惉
+ main.registerReceiver(receiver, filter); //娉ㄥ唽鐩戝惉
+ } catch (e) {
+ console.log('鎼滅储钃濈墮璁惧寮傚父锛�' + e);
+ var button1 = document.getElementById('bt1');
+ if (button1) {
+ button1.disabled = false;
+ button1.value = '鎼滅储璁惧';
+ }
+ }
}
var device = null,
@@ -87,96 +124,104 @@
bluetoothSocket = null;
function print(mac_address,printStr) {
- if (!mac_address) {
- mui.toast('璇烽�夋嫨钃濈墮鎵撳嵃鏈�');
- return;
- }
+ requestBluetoothPermissions(); // 鏂板锛氬厛鐢宠鏉冮檺
+ try {
+ if (!mac_address) {
+ mui.toast('璇烽�夋嫨钃濈墮鎵撳嵃鏈�');
+ return;
+ }
- main = plus.android.runtimeMainActivity();
- BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
- UUID = plus.android.importClass("java.util.UUID");
- uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
- BAdapter = BluetoothAdapter.getDefaultAdapter();
- device = BAdapter.getRemoteDevice(mac_address);
- plus.android.importClass(device);
- bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
- plus.android.importClass(bluetoothSocket);
+ main = plus.android.runtimeMainActivity();
+ BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
+ UUID = plus.android.importClass("java.util.UUID");
+ uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
+ BAdapter = BluetoothAdapter.getDefaultAdapter();
+ device = BAdapter.getRemoteDevice(mac_address);
+ plus.android.importClass(device);
+ bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
+ plus.android.importClass(bluetoothSocket);
- if (!bluetoothSocket.isConnected()) {
- console.log('妫�娴嬪埌璁惧鏈繛鎺ワ紝灏濊瘯杩炴帴....');
- bluetoothSocket.connect();
- }
+ if (!bluetoothSocket.isConnected()) {
+ console.log('妫�娴嬪埌璁惧鏈繛鎺ワ紝灏濊瘯杩炴帴....');
+ bluetoothSocket.connect();
+ }
- console.log('璁惧宸茶繛鎺�');
+ console.log('璁惧宸茶繛鎺�');
- if (bluetoothSocket.isConnected()) {
- var outputStream = bluetoothSocket.getOutputStream();
- plus.android.importClass(outputStream);
-// var string =
-// '! 0 200 200 640 1\n'
-// +'PAGE-WIDTH 640\n'
-// +'PW 848\n'
-// +'TONE 0\n'
-// +'SPEED 0\n'
-// +'GAP-SENSE\n'
-// +'NO-PACE\n'
-// +'POSTFEED 0\n'
-// +'LEFT\n'
-// +'T 65 1 20 300 鐗╂枡缂栫爜锛歕n'
-// +'SETBOLD 2\n'
-// +'T 65 1 135 300 {0}\n'
-// +'SETBOLD 0\n'
-// +'T 65 0 20 330 鐗╂枡鍚嶇О锛歕n'
-// +'T 65 1 135 330 {4}\n'
-// +'T 65 1 20 360 鐗╂枡瑙勬牸锛歕n'
-// +'T 65 1 135 360 {1} \n'
-// +'T 65 1 135 390 {18}\n'
-// +'T 65 0 20 420 鍒拌揣鍗曞彿锛歕n'
-// +'T 65 1 135 420 {16}\n'
-// +'T 65 0 20 450 閿�鍞鍗曪細\n'
-// +'T 65 1 135 450 {17}\n'
-// +'T 65 0 20 475 渚涘簲鍟嗭細\n'
-// +'T 65 1 135 475 {2}\n'
-// +'T 65 0 20 500 妫�楠屽憳锛歕n'
-// +'T 65 1 135 500 {3}\n'
-// +'T 65 0 320 500 妫�楠屾棩鏈燂細\n'
-// +'T 65 1 435 500 {5}\n'
-// +'SETBOLD 2\n'
-// +'SETBOLD 0\n'
-// +'SETMAG 0 0\n'
-// +'T 65 1 350 20 鏁伴噺锛歕n'
-// +'T 65 1 445 20 {6}\n'
-// +'T 65 1 350 55 鏍囧噯瑁呯鏁帮細\n'
-// +'T 65 1 490 55 {7}\n'
-// +'T 65 1 350 90 绠辨暟锛歕n'
-// +'T 65 1 445 90 {8}\n'
-// +'T 65 1 350 125 瀹㈡埛锛歕n'
-// +'T 65 1 445 125 {9}\n'
-// +'T 65 1 350 160 鐗堟湰鍙凤細\n'
-// +'T 65 1 445 160 {10}\n'
-// +'T 65 1 350 195 鏉愯川锛歕n'
-// +'T 65 1 445 195 {11}\n'
-// +'T 65 1 350 230 灏哄锛歕n'
-// +'T 65 1 445 230 {12}\n'
-// +'T 65 1 350 265 鍏跺畠鍖呰瑕佹眰锛歕n'
-// +'T 65 1 510 265 {13}\n'
-// +'T 65 1 350 300 涓濆嵃鍟嗘爣锛歕n'
-// +'T 65 1 470 300 {14}\n'
-// +'SETBOLD 2\n'
-// +'SETBOLD 0\n'
-// +'B QR 40 20 M 12 H 4\n'
-// +'MA,A1234567890\n'
-// +'ENDQR\n'
-// +'B 128 2 1 50 50 530 A1234567890\n'
-// +'T 65 1 200 590 A1234567890\n'
-// +'FORM\n'
-// +'PRINT\n';
- var bytes = plus.android.invoke(printStr, 'getBytes', 'gbk');
- outputStream.write(bytes);
- outputStream.flush();
- device = null //杩欓噷鍏抽敭
- bluetoothSocket.close(); //蹇呴』鍏抽棴钃濈墮杩炴帴鍚﹀垯鎰忓鏂紑鐨勮瘽鎵撳嵃閿欒
+ if (bluetoothSocket.isConnected()) {
+ var outputStream = bluetoothSocket.getOutputStream();
+ plus.android.importClass(outputStream);
+ // var string =
+ // '! 0 200 200 640 1\n'
+ // +'PAGE-WIDTH 640\n'
+ // +'PW 848\n'
+ // +'TONE 0\n'
+ // +'SPEED 0\n'
+ // +'GAP-SENSE\n'
+ // +'NO-PACE\n'
+ // +'POSTFEED 0\n'
+ // +'LEFT\n'
+ // +'T 65 1 20 300 鐗╂枡缂栫爜锛歕n'
+ // +'SETBOLD 2\n'
+ // +'T 65 1 135 300 {0}\n'
+ // +'SETBOLD 0\n'
+ // +'T 65 0 20 330 鐗╂枡鍚嶇О锛歕n'
+ // +'T 65 1 135 330 {4}\n'
+ // +'T 65 1 20 360 鐗╂枡瑙勬牸锛歕n'
+ // +'T 65 1 135 360 {1} \n'
+ // +'T 65 1 135 390 {18}\n'
+ // +'T 65 0 20 420 鍒拌揣鍗曞彿锛歕n'
+ // +'T 65 1 135 420 {16}\n'
+ // +'T 65 0 20 450 閿�鍞鍗曪細\n'
+ // +'T 65 1 135 450 {17}\n'
+ // +'T 65 0 20 475 渚涘簲鍟嗭細\n'
+ // +'T 65 1 135 475 {2}\n'
+ // +'T 65 0 20 500 妫�楠屽憳锛歕n'
+ // +'T 65 1 135 500 {3}\n'
+ // +'T 65 0 320 500 妫�楠屾棩鏈燂細\n'
+ // +'T 65 1 435 500 {5}\n'
+ // +'SETBOLD 2\n'
+ // +'SETBOLD 0\n'
+ // +'SETMAG 0 0\n'
+ // +'T 65 1 350 20 鏁伴噺锛歕n'
+ // +'T 65 1 445 20 {6}\n'
+ // +'T 65 1 350 55 鏍囧噯瑁呯鏁帮細\n'
+ // +'T 65 1 490 55 {7}\n'
+ // +'T 65 1 350 90 绠辨暟锛歕n'
+ // +'T 65 1 445 90 {8}\n'
+ // +'T 65 1 350 125 瀹㈡埛锛歕n'
+ // +'T 65 1 445 125 {9}\n'
+ // +'T 65 1 350 160 鐗堟湰鍙凤細\n'
+ // +'T 65 1 445 160 {10}\n'
+ // +'T 65 1 350 195 鏉愯川锛歕n'
+ // +'T 65 1 445 195 {11}\n'
+ // +'T 65 1 350 230 灏哄锛歕n'
+ // +'T 65 1 445 230 {12}\n'
+ // +'T 65 1 350 265 鍏跺畠鍖呰瑕佹眰锛歕n'
+ // +'T 65 1 510 265 {13}\n'
+ // +'T 65 1 350 300 涓濆嵃鍟嗘爣锛歕n'
+ // +'T 65 1 470 300 {14}\n'
+ // +'SETBOLD 2\n'
+ // +'SETBOLD 0\n'
+ // +'B QR 40 20 M 12 H 4\n'
+ // +'MA,A1234567890\n'
+ // +'ENDQR\n'
+ // +'B 128 2 1 50 50 530 A1234567890\n'
+ // +'T 65 1 200 590 A1234567890\n'
+ // +'FORM\n'
+ // +'PRINT\n';
+ var bytes = plus.android.invoke(printStr, 'getBytes', 'gbk');
+ outputStream.write(bytes);
+ outputStream.flush();
+ device = null //杩欓噷鍏抽敭
+ bluetoothSocket.close(); //蹇呴』鍏抽棴钃濈墮杩炴帴鍚﹀垯鎰忓鏂紑鐨勮瘽鎵撳嵃閿欒
- }
-
+ }
+ } catch (e) {
+ console.log('钃濈墮鎵撳嵃寮傚父锛�' + e);
+ mui.toast('钃濈墮鎵撳嵃澶辫触锛岃妫�鏌ユ潈闄愬拰璁惧杩炴帴');
+ try {
+ if (bluetoothSocket) bluetoothSocket.close();
+ } catch (ex) {}
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3