qq_29054239 2017-12-12 18:32 采纳率: 0%
浏览 9943
已结题

js链接蓝牙打印机功能实现

有没有大神有demo,移动端实现用蓝牙连接打印机并且能实现打印功能。

目前在看ng-cordova-bluetooth,但是环境是个问题。

有没有更简单的方法可以操作。

  • 写回答

5条回答 默认 最新

  • 子幽 2017-12-12 18:39
    关注
    评论
  • threenewbee 2017-12-12 18:52
    关注

    和是否蓝牙没有什么关系,蓝牙的配对是操作系统的事情,js调用标准的打印接口,至于是打印到蓝牙打印机还是非蓝牙打印机,代码都是一样的。

    评论
  • 村上一棵树 2017-12-12 19:05
    关注

    下面是html

    <!DOCTYPE html>

    <head>
        <meta charset="UTF-8">
    
        <title></title>
    
        <script src="js/pr.js"></script>
    </head>
    
    <body>
    
    
        <p><input id="bt1" type="button" value="搜索设备" onclick="searchDevices('a')"></p>
    
               </button>
    
        </div>
    
        <div>
            未配对蓝牙设备
            <ul id="list1">
    
            </ul>
        </div>
    
        <div>
            已配对蓝牙设备
    
            <ul id="list2">
    
            </ul>
        </div>
    
    </body>
    

    下面是js文件

    //address=""搜索蓝牙//address=设备mac地址,自动配对给出mac地址的设备
    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='正在搜索请稍候';
    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()); //打印机mac地址
    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()); //打印机mac地址
                    li1.setAttribute('onclick', 'searchDevices(id)'); //注册click点击列表进行配对
                    on = BleDevice.getName();
                    li1.innerText = on;
                    vlist1.appendChild(li1);
    
                    }
    
                }
            } else {
                if(BleDevice.getName() != un ){ //判断防止重复添加
                console.log("已配对蓝牙设备:" + BleDevice.getName() + '    ' + BleDevice.getAddress());
                var li2 = document.createElement('li'); //注册
                li2.setAttribute('id', BleDevice.getAddress()); //打印机mac地址
                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);
    
    main.registerReceiver(receiver, filter); //注册监听
    

    }

    var device = null,
    BAdapter = null,
    BluetoothAdapter = null,
    uuid = null,
    main = null,
    bluetoothSocket = null;

    function print(mac_address) {
    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);
    
    if (!bluetoothSocket.isConnected()) {
        console.log('检测到设备未连接,尝试连接....');
        bluetoothSocket.connect();
    }
    
    console.log('设备已连接');
    
    if (bluetoothSocket.isConnected()) {
        var outputStream = bluetoothSocket.getOutputStream();
        plus.android.importClass(outputStream);
        var string = "打印测试\r\n";
        var bytes = plus.android.invoke(string, 'getBytes', 'gbk');
        outputStream.write(bytes);
        outputStream.flush();
        device = null //这里关键
        bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误
    
    }
    

    }

    展开全部

    评论
  • laohuang__ 2017-12-12 19:06
    关注

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



    <!--{$aListData.name}-->准考证

    .noprint{display : none } function preview(oper) { if (oper < 10) { bdhtml=window.document.body.innerHTML;//获取当前页的html代码 sprnstr="<!--startprint"+oper+"-->";//设置打印开始区域 eprnstr="<!--endprint"+oper+"-->";//设置打印结束区域 prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//从结束代码向前取html window.document.body.innerHTML=prnhtml; window.print(); window.document.body.innerHTML=bdhtml; } else { window.print(); } } jQuery(function($){ $("#closeButton").click(function(){ window.close(); }) });



    关闭

    南京聋人高级中学2013年预科招生考试

    姓名:<!--{$aListData.name}-->

    性别:<!--{$aListData.gender}-->

    毕业学校:<!--{$aListData.grschool}-->

    编号:" width="140">

    考试日程:

    地点:

    <!--{section name=data loop=$aRegExamsche}-->
    <!--{$aRegExamsche[data].date}-->
    <!--{$aRegExamsche[data].time}-->
    <!--{$aRegExamsche[data].lesson}-->
    <!--{$aRegExamsche[data].place}-->

    <!--{/section}-->


    展开全部

    评论
  • qq_37348304 2017-12-13 03:00
    关注

    接下来就到打印部分了。其实对于蓝牙打印,说穿就两个要点,第一连上设备设备,第二传输命令。第一步就不多说了,官网上;传输数据也很简单,通过BluetoothSocket,关键是指令,其实大部分的蓝牙打印机都是支持ESC/POS指令的,所以只要了解这个指令就可以很好的完成功能了。

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥35 spaceclaim脚本
  • ¥15 MC9S12XS128单片机实验
  • ¥15 失败的github程序安装
  • ¥15 WSL上下载的joern在windows怎么用?
  • ¥15 jetson nano4GB
  • ¥15 电脑回复出厂设置,重装过程报错提示,求解决方案Windows 无法分析或处理无人参与应答文件 [C:\WINDOWS\Panther\unattend.xml,如何解决?
  • ¥15 进入lighttools中的UDOP编辑器的方法
  • ¥15 求Gen6d训练数据集
  • ¥20 liunx中winscp中可以登入ftp,但是不能登入sftp,如何解决
  • ¥15 lighttools的光学属性自定义的用法流程
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部