更新记录

1.1.7(2021-08-30)

增加二维码转图片打印,可调整二维码大小,优化二维码扫描效果。 更新打印图片,可调整打印图片大小

1.1.6(2021-04-29)

更新读取设备数据方法

1.1.5(2021-04-26)

修复读取蓝牙设备数据异常

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 10.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原生插件配置”->”云端插件“列表中删除该插件重新选择


原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择

更新内容:

1、增加打网络图片及二维码功能。

蓝牙打印简介

ZJQ-BluetoothUtil 是基于原生手机蓝牙打印的插件,目前支持android蓝牙打印,支持市场上大多蓝牙小票打印机。

使用步骤:

1、插件安装到uniapp项目中。

image-20210327162620566

2、在相关组件中引用本地插件。

引用方法,在组件中定义 如: const bluetoothUtil = uni.requireNativePlugin('ZJQ-BluetoothUtil');

3、在uniapp项目中,添加定时器定时读取搜索到的设备

方法1: let userTimer = setInterval(() => { bluetoothUtil.getDevices(res => { if (res.isDiscoveryComplete===1) { clearInterval(userTimer ); //搜索完成清除定时器 } else { this.binddevices = res.bindDevice; this.notbinddevices = res.notbindDevice; } }); }, 2000); //每2秒获取一次搜索到的设备

方法2(推荐使用):

1、定义全局页面事件 var globalEvent = uni.requireNativePlugin('globalEvent');

2、在onload事件中监听蓝牙事件获取搜索到的设备

globalEvent.addEventListener('DevEvent', (e)=> { console.log('DevEvent'+JSON.stringify(e)); if(e.bindDevice){ this.binddevice = e.bindDevice } if(e.notbindDevices){ this.notbinddevice = e.notbindDevices } });

4、在方法中调用相关蓝牙连接、打印API。

API说明

函数名称 参数 说明
enableBlueTooth 启用本机蓝牙。
startDiscovery 搜索蓝牙设备,注册蓝牙广播事件。
stopDiacovery 停止搜索蓝牙设备,停止蓝牙广播。
getDevices 获取蓝牙设备及蓝牙搜索状态,包括搜索到已配对设备、未配对设备。返回jsonobject对象,isDiscoveryComplete是否搜索完成,蓝牙搜索完成返回:1,正在搜索返回为:0;已配对设备列表为:bindDevice,未配对设备列表为:notbindDevice
getBindDevice 获取最近一次搜索到已配对设备列表。参数为:bindDevice。
connectbindDevice 需连接设备MAC地址:参数为字符串 连接蓝牙设备,传入搜索到蓝牙设备地址。
intPrint 初始化打印,在开始开始调用此方法。
printLine 数字:intlineNumber 打印空行,传数数字打印多行。
printTabSpace 数字:length 打印空格
printText 字符串:text 打印字符
printAlignment 数字:0、1或2 对齐方式:0 : 左对齐,1:居中,2:右对齐
printLargeText 字符串:text 打印大字号标题。
printDashLine 打印虚线,样式:------------------------
printBitmap 传入Bitmap格式图片 打印图片
printUrlBitmap 图片URL:String 打印网络图片
printUrlBitmap 图片URL:String printUrlBitmap(String url,int width,int height);
printQrcode 二维码,类型为字符串 打印二维码
printQrcodeImg 二维码,类型为字符串, 将二维码转换图片进行打印, printQrcodeImg(code,int width,int height);
readdata 读取设备信息 使用方法:
1、注册监听事件var globalEvent = uni.requireNativePlugin('globalEvent'); r />
2、在onLoad事件里监听
globalEvent.addEventListener('revdataEvent', function(e) { console.log('myEvent'+JSON.stringify(e));
});

代码例子:

<template>
    <view class="content">
        <view class="text-area">
            <button type="default" @click="startdiscovery">搜索蓝牙设备</button>
            <button type="default" @click="canceldiscovery()">停止搜索</button>
            <button type="default" @click="print()">打印</button>
            <button type="default" @click="readdata">读取</button>
        </view>
        <view>
            已配对设备
            <scroll-view :scroll-y="true" style="height: 400rpx;" show-scrollbar="true">
                <radio-group>
                    <view v-for="(item, index) in binddevice" :key="index" v-if="item.devname" style="margin: 0px 40px;">
                        <view style="font-size: 32rpx; color: #333; margin-top: 5px;">
                            <radio :value="item.devname" @tap="connectdev(item.address,item.devname,0)" />
                            {{ item.devname }}
                        </view>
                        <view style="font-size: 24rpx;margin-top: 3px;">设备地址: {{ item.address }}</view>
                    </view>
                </radio-group>
            </scroll-view>
            未配对设备
            <scroll-view :scroll-y="true" style="height: 400rpx;" show-scrollbar="true">
                <radio-group>
                    <view v-for="(item, index) in notbinddevice" :key="index" v-if="item.devname" style="margin: 0px 40px;">
                        <view style="font-size: 32rpx; color: #333; margin-top: 5px;">
                            <radio :value="item.devname" @tap="connectdev(item.address,item.devname,0)" />
                            {{ item.devname }}
                        </view>
                        <view style="font-size: 24rpx;margin-top: 3px;">设备地址: {{ item.address }}</view>
                    </view>
                </radio-group>
            </scroll-view>
        </view>
    </view>
</template>

<script>
    //引用插件
    const bluetoothUtil = uni.requireNativePlugin('ZJQ-BluetoothUtil');
    //定义定时器
    var getDevsInterval;
    //页面全局事件
    var globalEvent = uni.requireNativePlugin('globalEvent');
    export default {
        data() {
            return {
                title: 'Hello',
                binddevice:[],
                notbinddevice:[]
            }
        },
        onLoad() {
            //定义监听设备数据事件
            globalEvent.addEventListener('revdataEvent', function(e) {
              console.log('ConDevEvent'+JSON.stringify(e));
            });
            //定义监听搜索到设备事件
            globalEvent.addEventListener('DevEvent', (e)=> {
              console.log('DevEvent'+JSON.stringify(e));
              if(e.bindDevice){
                   this.binddevice = e.bindDevice
              }
              if(e.notbindDevices){
                  this.notbinddevice = e.notbindDevices
              }
            });
        },
        methods: {
            //开始搜索
            startdiscovery(){
                bluetoothUtil.startDiscovery();
            },
            //取消搜索
            canceldiscovery() {
                bluetoothUtil.stopDiacovery();
            },
            //连接设备
            connectdev(address,name){
                bluetoothUtil.connectnotbindDevice(address,res=>{
                    console.log(res)
                })
            },
            //读取设备信息
            readdata(){
                bluetoothUtil.readdata();
            },
            //打印
            print(){
                bluetoothUtil.intPrint();  //打印前调用初始化方法
                bluetoothUtil.printLine(1); // 打印1行,传数字打印多行。
                bluetoothUtil.printLine(1); //打印空行
                bluetoothUtil.printTabSpace() //打印空格
                bluetoothUtil.printText("打印文本")// 打印文本
                bluetoothUtil.printLine(1);//打印空行
                bluetoothUtil.printText("打印文本")// 打印文本
                bluetoothUtil.printLine(1);//打印空行
                bluetoothUtil.printAlignment(0); //设置对齐方式:0 : 左对齐,1:居中,2:右对齐
                bluetoothUtil.printLine(1);//打印空行
                bluetoothUtil.printLargeText("AAA") // 打印大号字体
                bluetoothUtil.printLine(1);//打印空行
                bluetoothUtil.printDashLine() // 打印虚线,样式:------------------------
                bluetoothUtil.printLine(1);//打印空行
                bluetoothUtil.printQrcode('打印二维码');  //打印二维码
                bluetoothUtil.printLine(1);//打印空行
                bluetoothUtil.printUrlBitmap('url'); // 打印url网络地址
                bluetoothUtil.printLine(1);//打印空行

                bluetoothUtil.printQrcodeImg('打印文本',300,300);  //打印二维码(二维码转图片打印,效果较好,可设置二维码大小)
                bluetoothUtil.printUrlBitmap('Url',380,380).then(res=>{
                    console.log(res)
                }) // 打印url网络地址 ,可设置图片打印大小
            }
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
    }

    .logo {
        height: 200rpx;
        width: 200rpx;
        margin-top: 200rpx;
        margin-left: auto;
        margin-right: auto;
        margin-bottom: 50rpx;
    }

    .text-area {
        display: flex;
        justify-content: center;
    }

    .title {
        font-size: 36rpx;
        color: #8f8f94;
    }
</style>

隐私、权限声明

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

需配置蓝牙权限及位置权限如下: <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/> // android10版本需配置

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

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

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