前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Native.js获取监听开关等操作Android蓝牙设备实例代码

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

作者头像
砸漏
发布2020-11-05 11:09:58
3.3K0
发布2020-11-05 11:09:58
举报
文章被收录于专栏:恩蓝脚本

Native.js开启关闭蓝牙

代码语言:javascript
复制
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监听蓝牙开关状态

代码语言:javascript
复制
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获取蓝牙设备列表

代码语言:javascript
复制
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页面代码

代码语言:javascript
复制
<!DOCTYPE html 
<html 
 <head 
 <meta charset="UTF-8" 
 <title </title 
 <script src="js/pr.js" </script 
 </head 
 <body 
 <div 
 <p <input id="bt1" type="button" value="搜索设备" onclick="searchDevices('a')" </p 
 </div 
 <div 
 未配对蓝牙设备
 <ul id="list1" 

 </ul 
 </div 

 <div 
 已配对蓝牙设备

 <ul id="list2" 

 </ul 
 </div 
 </body 
</html 

Js文件

代码语言:javascript
复制
//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蓝牙设备的操作实例代码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档