123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- import bluetoothTool from "@/plugins/BluetoothTool.js";
- import permission from "@/plugins/permission.js";
- const statusMap = [
- {
- code: 0,
- msg: "蓝牙设备已打开",
- },
- {
- code: 1,
- msg: "蓝牙设备未打开",
- },
- {
- code: 2,
- msg: "当前设备不支持蓝牙",
- },
- ];
- export default {
- namespaced: true,
- // 储存数据
- state: {
- discoveredDevices: [], // 已发现的蓝牙设备
- connectedBleDevice: null, // 当前连接的蓝牙设备
- connectedDeviceId: "", // 已连接的蓝牙设备ID
- },
- // 修改数据
- mutations: {
- // 设置已发现的蓝牙设备
- setDiscoveredDevices(state, data) {
- console.log("setDiscoveredDevices------", data);
- state.discoveredDevices = data;
- },
- // 设置已发现的蓝牙设备
- addDiscoveredDevice(state, device) {
- console.log("addDiscoveredDevice------", device);
- state.discoveredDevices.push(device);
- },
- // 已连接蓝牙设备
- setConnectedBleDevice(state, data) {
- console.log(111111, data);
- state.connectedBleDevice = { ...data };
- },
- // 设置已连接蓝牙设备ID
- setConnectedDeviceId(state, data) {
- state.connectedDeviceId = data;
- },
- },
- actions: {
- // 检查蓝牙设备打开状态
- checkBleStatus({ commit }) {
- return new Promise((resolve) => {
- // 检查蓝牙是否打开
- if (bluetoothTool.isSupportBluetooth()) {
- console.log("蓝牙设备支持");
- if (bluetoothTool.getBluetoothStatus()) {
- console.log("蓝牙设备已打开");
- resolve({
- code: statusMap[0].code,
- msg: statusMap[0].msg,
- });
- } else {
- console.log("蓝牙设备未打开");
- resolve({
- code: statusMap[1].code,
- msg: statusMap[1].msg,
- });
- }
- } else {
- resolve({
- code: statusMap[2].code,
- msg: statusMap[2].msg,
- });
- }
- });
- },
- // 初始蓝牙
- initBle({ commit, state }) {
- console.log("state======", state);
- // 检查蓝牙权限
- permission
- .androidPermissionCheck("bluetooth")
- .then(() => {
- bluetoothTool.init({
- // 监听蓝牙状态变化
- listenBTStatusCallback: (state) => {
- if (state == "STATE_ON") {
- console.log("蓝牙已打开:", state);
- // 可以在这里添加蓝牙打开后的初始化逻辑
- } else if (state == "STATE_OFF") {
- console.log("蓝牙已关闭:", state);
- // 可以在这里添加蓝牙关闭后的清理逻辑
- }
- },
- // 发现新设备回调
- discoveryDeviceCallback: function (device) {
- try {
- // 基本验证
- if (!device || !device.name) {
- console.log("无效设备:", device);
- return;
- }
- // 设备名称过滤
- const deviceName = device.name.toUpperCase();
- const isBleDevice =
- deviceName.endsWith("_BLE") ||
- deviceName.endsWith("-LE") ||
- deviceName.endsWith("-BLE");
- // 如果是BLE设备,直接返回
- if (isBleDevice) {
- console.log("发现BLE设备:", device);
- return;
- }
- // 设备去重
- const isDuplicate = state.discoveredDevices.find(
- (item) => item.address === device.address
- );
- if (isDuplicate) {
- console.log("重复设备:", device);
- return;
- }
- // 添加设备到列表
- console.log("发现新设备:", device);
- commit("addDiscoveredDevice", device);
- } catch (error) {
- console.error("处理设备发现回调出错:", error);
- }
- },
- // 搜索完成回调
- discoveryFinishedCallback: function () {
- console.log("蓝牙设备搜索完成");
- // 可以在这里添加搜索完成后的处理逻辑
- },
- // 读取数据回调
- readDataCallback: function (dataByteArr) {
- try {
- if (!dataByteArr || dataByteArr.length === 0) {
- console.log("无数据读取");
- return;
- }
- console.log("读取到数据:", dataByteArr);
- // 这里可以添加数据处理逻辑
- } catch (error) {
- console.error("处理数据读取回调出错:", error);
- }
- },
- // 连接异常回调
- connExceptionCallback: function (e) {
- console.error("蓝牙连接异常:", e);
- // 可以在这里添加连接异常的处理逻辑
- uni.showToast({
- icon: "none",
- title: "蓝牙连接异常,请重试",
- duration: 2000,
- });
- },
- });
- })
- .catch((error) => {
- console.error("蓝牙权限检查失败:", error);
- uni.showToast({
- icon: "none",
- title: "请授予蓝牙权限",
- duration: 2000,
- });
- });
- },
- // 搜索蓝牙设备
- async discovery({ commit }) {
- // 使用openBluetoothAdapter 接口,免去主动申请权限的麻烦
- uni.openBluetoothAdapter({
- success: async (res) => {
- try {
- await permission.androidPermissionCheck("bluetooth");
- commit("setDiscoveredDevices", []);
- bluetoothTool.discoveryNewDevice();
- console.log("openBluetoothAdapter=====", res);
- } catch (err) {
- bluetoothTool.shortToast(`授权失败:!${err}`);
- console.log("授权失败:", err);
- }
- },
- });
- },
- // 连接蓝牙
- connectBT({ commit }, device) {
- uni.showLoading({
- title: "连接中",
- });
- return new Promise((resolve) => {
- bluetoothTool.connDevice(device.address, (result) => {
- uni.hideLoading();
- if (result) {
- console.log(result);
- bluetoothTool.cancelDiscovery();
- commit("setConnectedBleDevice", device);
- commit("setConnectedDeviceId", device.address);
- uni.showToast({
- icon: "none",
- title: "连接成功",
- });
- resolve(device);
- } else {
- uni.showToast({
- icon: "none",
- title: "连接失败",
- });
- resolve(null);
- }
- });
- });
- },
- // 断开连接
- closeBluetooth({ commit, state }) {
- if (state.connectedDeviceId != "") {
- bluetoothTool.closeBtSocket();
- commit("setConnectedBleDevice", null);
- commit("setConnectedDeviceId", "");
- }
- },
- cancelDiscovery() {
- bluetoothTool.cancelDiscovery();
- },
- },
- };
|