更新记录

1.0.1(2023-02-10)

获取蓝牙列表,连接蓝牙


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


插件使用文档

一.引入插件

const bluetooth = uni.requireNativePlugin('LY-BluetoothWeight');

二.使用

  • 初始化
//isPrimitive=false回调数据转成保留2位小数数据,isPrimitive=true蓝牙返回的原始数据流(已转成字符串)
bluetooth.initBluetooth({isPrimitive:false})
  • 扫描蓝牙
bluetooth.discoveryBluetooth((res) => {//多次回调,可添加到数组展示蓝牙列表
//res数据:{"status":5,"data":{"name":"蓝牙名称","address":"蓝牙地址"}}
    if (res.status == 5) {
        this.bluetoothList = this.bluetoothList.concat(res.data)
    }
});
  • 连接蓝牙(未配对弹配对框待配对成功连接蓝牙,已配对直接连接)
res.status 说明 res.data
0 没有配对蓝牙
1 读取数据 res.data(返回电子秤数据,已保留两位小数)
2 蓝牙连接成功
3 蓝牙已断开
bluetooth.connectBlutoothWithName({
    blutoothName: bluetoothName//蓝牙名称
}, (res) => {
    switch (parseInt(res.status)) {
        case 0: {
            uni.showToast({
                title: '请先配对电子秤',
                icon: 'error'
            })
        }
        break;
        case 1: {
            this.weight = res.data;
        }
        break;
        case 2: {
            uni.showToast({
                title: '蓝牙连接成功',
                icon: 'success'
            })
        }
        break;
        case 3: {
            uni.showToast({
                title: '蓝牙已断开',
                icon: 'error'
            })
        }
        break;
        default:
        break;
    }
})
  • 断开蓝牙(该插件在当前页面销毁时会自动断开蓝牙,也可调用下面方法在当前页面断开蓝牙)
bluetooth.disconnectBluetooth();
  • 完整示例
<template>
    <view style="display: flex;flex-direction: column;width: 750rpx;">
        <view class="header">
            <text style="margin-bottom: 40rpx;">{{weight}}kg</text>
            <view class="btn_view">
                <view class="btn" style="margin-right: 40rpx;" @click="connectBluetooth('BT04')">
                    连接指定蓝牙
                </view>
                <view class="btn" style="margin-right: 40rpx;" @click="discovery">
                    获取蓝牙列表
                </view>
                <view class="btn" @click="disconnect">
                    断开蓝牙
                </view>
            </view>
        </view>
        <view class="list">
            <view class="cell" v-for="(item,index) in bluetoothList" :key="'bluetooth'+index"
                @click.stop="connectBluetooth(item.name)">
                <text style="color:blueviolet;">名称:{{item.name}}</text>
                <text style="color: blue;">地址:{{item.address}}</text>
            </view>
        </view>
    </view>

</template>

<script>
    const bluetooth = uni.requireNativePlugin('BluetoothModule');
    // const bluetooth = uni.requireNativePlugin('LY-BluetoothWeight');
    export default {
        data() {
            return {
                weight: "",
                bluetoothList: []
            }
        },
        onLoad() {
            bluetooth.initBluetooth()
        },
        methods: {

            connectBluetooth(bluetoothName) {
                if (bluetoothName == "") {
                    uni.showToast({
                        title: '蓝牙名称为空',
                        icon: 'none'
                    })
                    return
                }
                bluetooth.connectBlutoothWithName({
                    blutoothName: bluetoothName
                }, (res) => {
                    switch (parseInt(res.status)) {
                        case 0: {
                            uni.showToast({
                                title: '请先配对电子秤',
                                icon: 'error'
                            })
                        }
                        break;
                    case 1: {
                        this.weight = res.data;
                    }
                    break;
                    case 2: {
                        uni.showToast({
                            title: '蓝牙连接成功',
                            icon: 'success'
                        })
                    }
                    break;
                    case 3: {
                        uni.showToast({
                            title: '蓝牙已断开',
                            icon: 'error'
                        })
                    }
                    break;
                    default:{

                    }

                    }
                })
            },
            discovery() {
                bluetooth.discoveryBluetooth((res) => {
                    if (res.status == 5) {
                        this.bluetoothList = this.bluetoothList.concat(res.data)
                    }
                });

            },
            // 断开蓝牙
            disconnect(){
                bluetooth.disconnectBluetooth();
            }

        }
    }
</script>

<style>
    .header {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 750rpx;
        background-color: aqua;
        padding: 20rpx 0;
    }

    .btn_view {
        display: flex;
        align-items: center;
        flex-direction: row;
        justify-content: center;
    }

    .list {
        width: 750rpx;
        display: flex;
        flex-direction: column;
    }

    .cell {
        display: flex;
        flex-direction: column;
        justify-content: center;
        padding: 10rpx;
        box-sizing: border-box;
        background-color: antiquewhite;
    }

    .btn {
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 8px;
        padding: 15rpx 15rpx;
        background-color: coral;
        box-sizing: border-box;
    }
</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-feature android:name="android.hardware.bluetooth" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问