uniApp连接传统蓝牙的斑马打印机打印

2025-10-27 06:20:21

1、1.  页面初始化,获取位置,打开蓝牙连接(必须打开定位)

let system = uni.getSystemInfoSync(); // 获取系统信息

if (system.platform === 'android') { // 判断平台

  var that = this

  var context = plus.android.importClass("android.content.Context");

  var locationManager = plus.android.importClass("android.location.LocationManager");

  var main = plus.android.runtimeMainActivity();

  var mainSvr = main.getSystemService(context.LOCATION_SERVICE);

  // 定位检测

  if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {

      uni.showModal({

        title: '提示',

        content: '请打开定位服务功能',

        showCancel: false, // 不显示取消按钮

        success() {

          if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {

            var Intent = plus.android.importClass('android.content.Intent');

            var Settings = plus.android.importClass('android.provider.Settings');

            var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

            main.startActivity(intent); // 打开系统设置GPS服务页面

          } else {

            console.log('GPS功能已开启');

        }

      }

   });

  return false

  } else {

    console.log('GPS功能已开启');

    that.searchDevices()

    return true

  }

}

2、2. 搜索蓝牙

//注册类

var that = this

that.list1 = []  //未配对

that.list2 = [] // 已配对

that.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();

uni.showLoading({

  title: '开始搜索设备'

})

var filter = new IntentFilter();

var bdevice = new BluetoothDevice();

BAdapter.startDiscovery(); //开启搜索  

var receiver;

receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {onReceive: function(context, intent) { //实现onReceiver回调函数  

plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作

if (intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {

  that.main.unregisterReceiver(receiver); //取消监听

  console.log("搜索结束")

  uni.hideLoading()

} else {

  if (intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getBondState() === 10) {

    that.list1.push({

      name: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getName(),

      address: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getAddress()

     })

  } else if (intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getBondState() === 12) {

    that.list2.push({

      name: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getName(),

      address: intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE).getAddress()

      })

    }

  }

 }

});

filter.addAction(bdevice.ACTION_FOUND);

filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);

filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);

filter.addAction(BAdapter.ACTION_STATE_CHANGED);

that.main.registerReceiver(receiver, filter); //注册监听  

3、3. 蓝牙连接

// mac_address为获取到蓝牙数据中的address字段

if (!mac_address) {

   mui.toast('请选择蓝牙打印机');

   return;

}

this.main = plus.android.runtimeMainActivity();

BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");

var 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);

this.bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);

plus.android.importClass(this.bluetoothSocket);

   if (!this.bluetoothSocket.isConnected()) {

          uni.showLoading({

            title: '检测到设备未连接,尝试连接....'

          })

          this.bluetoothSocket.connect();

    }

uni.hideLoading()

console.log('设备已连接')

4、4. 打印

if (this.bluetoothSocket.isConnected()) {

   uni.showLoading({

     title: '打印中,请稍后!'

   })

   var outputStream = this.bluetoothSocket.getOutputStream();

   plus.android.importClass(outputStream);

   var string = "! 0 200 200 418 1\r\n" +

            "LABEL\r\n" +

            "PW 575\r\n" +

            "TONE 0\r\n" +

            "SPEED 2\r\n" +

            "ON-FEED IGNORE\r\n" +

            "NO-PACE\r\n" +

            "BAR-SENSE\r\n" +

            "B QR 130 5 M 2 U 5\r\n" +

            "MA,e9b98ae6a1a5e4bb99c2b7e7baa4e4ba91e5bc84e5b7a7e5ae8be7a7a6e8a782e7baa4e4ba91e5bc84e5b7a7efbc8ce9a39ee6989fe4bca0e681a8efbc8ce993b6e6b189e8bfa2e8bfa2e69a97e5baa6e38082e98791e9a38ee78e89e99cb2e4b880e79bb8e980a2efbc8ce4bebfe8839ce58db4e4babae997b4e697a0e695b0e38082e69f94e68385e4bcbce6b0b4efbc8ce4bdb3e69c9fe5a682e6a2a6efbc8ce5bf8de9a1bee9b98ae6a1a5e5bd92e8b7afe38082e4b8a4e68385e88ba5e698afe4b985e995bfe697b6efbc8ce58f88e5b282e59ca8e69c9de69c9de69aaee69aaee38082\r\n" +

            "ENDQR\r\n" +

            "FORM\r\n" +

            "PRINT\r\n"

          var bytes = plus.android.invoke(string, 'getBytes', 'gbk');

          outputStream.write(bytes);

          outputStream.flush();

          device = null //这里关键

          uni.hideLoading()

          // bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误  

}

5、5. 打印结束关闭蓝牙连接

bluetoothSocket.close()

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢