热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Native.js获取监听开关等操作Android蓝牙设备实例代码

本文为大家分享了Native.js对Android蓝牙设备的操作实例代码包括:监听蓝牙开关状态,开启关闭蓝牙,获取蓝牙设备列表,蓝牙连接票据打印机

Native.js开启关闭蓝牙

var main = plus.android.runtimeMainActivity();
var COntext= plus.android.importClass("android.content.Context");
var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager);//引入相关的method函数
var BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter);//引入相关的method函数,这样之后才会有isEnabled函数支持
if(!BAdapter.isEnabled()) {
BAdapter.enable();
}

Native.js监听蓝牙开关状态

var main = plus.android.runtimeMainActivity();
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
var BAdapter = new BluetoothAdapter.getDefaultAdapter();
var resultDiv = document.getElementById('output');
var receiver=plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) { //实现onReceiver回调函数
 plus.android.importClass(intent);
 console.log(intent.getAction());
 resultDiv.textContent += '\nAction :' + intent.getAction();
 main.unregisterReceiver(receiver);
 }
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var filter = new IntentFilter();
filter.addAction(BAdapter.ACTION_STATE_CHANGED); //监听蓝牙开关
main.registerReceiver(receiver, filter); //注册监听

if (!BAdapter.isEnabled()) {
 BAdapter.enable(); //启动蓝牙
}else{
 BAdapter.disable();
}

Native.js获取蓝牙设备列表

unction bluetooth_list(){
var main = plus.android.runtimeMainActivity();
var COntext= plus.android.importClass("android.content.Context");
var lists = BAdapter.getBondedDevices();
plus.android.importClass(lists);
var resultDiv = document.getElementById('bluetooth_list');
var iterator = lists.iterator();
plus.android.importClass(iterator);
while (iterator.hasNext()) {
var d = iterator.next();
plus.android.importClass(d);
console.log(d.getAddress());
}
}

Native.js蓝牙连接票据打印机

测试机:佳博PT-280便携打印机
手机:华为低端
功能:扫描周围蓝牙设备加入列表,点击未配对设备,自动配对设备,点击已配对设备,进行打印测试

html页面代码



 
 
 
 
 
 
 

未配对蓝牙设备
已配对蓝牙设备

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(); //必须关闭蓝牙连接否则意外断开的话打印错误

 }

}

以上是针对Native.js对Android蓝牙设备的操作实例代码,如果你想了解Native.js的其它实例代码或原生的Android蓝牙操作方法请查看下面的相关链接


推荐阅读
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 本文探讨了缓存系统中的两个关键问题——缓存穿透与缓存失效时的雪崩效应,以及这些问题的解决方案。此外,文章还介绍了数据处理、数据库拆分策略、缓存优化、拆分策略、应用架构演进及通信协议的选择等内容。 ... [详细]
  • 程序运行时变量的生命周期与存储管理
    本文介绍了程序运行时环境中各种变量的生命周期及其存储空间管理。通过分析典型程序空间布局,探讨了数据区、代码区、堆区和栈区的功能与特性。此外,文章详细解析了局部变量与全局变量的区别,以及它们如何影响程序的性能和资源利用。 ... [详细]
  • 深入解析TCP的三次握手、四次挥手及路由器的三层转发机制
    本文详细探讨了OSI七层模型中的传输层,重点分析了TCP协议的连接建立(三次握手)和断开(四次挥手)过程,以及路由器如何在三层网络中实现数据包的高效转发。 ... [详细]
  • 深入理解CSS中position:relative与position:absolute的使用技巧
    在模仿设计一个在线商城页面时,我深入研究了CSS布局中的position属性,特别是relative和absolute两种定位方式的使用技巧和注意事项。本文总结了从CSDN博主onizukayao的文章中学到的关键点,并结合实际案例进行了详细解释。 ... [详细]
  • 微信小程序开发教程(二):利用AppId启动你的小程序
    上一节我们探讨了微信小程序的注册流程。本篇将深入介绍如何获取并使用AppId来创建微信小程序,为后续开发打下基础。 ... [详细]
  • 利用Charles工具进行移动设备网络监控
    本文介绍了如何通过配置Charles代理软件来实现对移动设备的网络请求进行监控和调试,适用于开发者或测试人员需要检查移动应用网络通信的情况。 ... [详细]
  • 撰写硕士论文首先需确定一个具有新颖性的研究主题,这不仅要求选题具备创新的观点、方法或材料,还需确保选题的可行性和深度。本文将详细介绍从选题到论文完成的六大步骤,帮助研究生高效完成高质量的学术论文。 ... [详细]
  • 在一个大型的应用系统中,往往需要多个进程相互协作,进程间通信(IPC,InterProcessCommunication)就显得比较重要了。在Linux系统中,有很多种IPC机制, ... [详细]
  • HTTP(超文本传输协议)是互联网上用于客户端和服务器之间交换数据的主要协议。本文详细介绍了HTTP的工作原理,包括其请求-响应机制、不同版本的发展历程以及HTTP数据包的具体结构。 ... [详细]
  • 基于HoG和SVM的人体检测技术解析
    近期深入研究了使用HoG(梯度方向直方图)与SVM(支持向量机)进行人体检测的技术。通过阅读大量文献,特别是Dalal等先驱者的著作,我对HoG算法有了较为深刻的理解,并在此基础上探讨了如何将其应用于实际场景。 ... [详细]
  • Vue 中实现 ECharts 组件的动态刷新与分页
    本文介绍了如何在 Vue 项目中使用 ECharts 组件实现数据的动态刷新和分页显示。通过合理的数据处理和页面逻辑设计,提升用户体验。 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • 本文介绍了在使用SQL Server的数据库邮件功能时,如何处理因文件附件或查询结果过大而导致的错误,并提供了解决方案。 ... [详细]
  • 本文介绍如何在已拥有签名密钥的情况下为 Ionic 3 开发的 Android 应用程序添加签名。如果您尚未创建签名文件,建议先参考相关指南完成该步骤。 ... [详细]
author-avatar
空白画叶子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有