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页面代码

<!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文件

//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蓝牙操作方法请查看下面的相关链接

(0)

相关推荐

  • android View 绘制完成监听的实现方法

    如下所示: //view重绘时回调 view.getViewTreeObserver().addOnDrawListener(new OnDrawListener() { @Override public void onDraw() { // TODO Auto-generated method stub } }); //view加载完成时回调 view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListe

  • android输入框内容改变的监听事件实例

    android输入框内容改变的监听事件一般用于比如我们常见的:登录qq时 用户名输入完整时头像自动显示,或者注册用户时实时提示注册格式是否正确等.那么我们在这里举例:判断输入框是否有内容,来改变按钮的状态,常用于搜索一类.截图如下:(布局代码不再给出) 首先所在的activity要 implements TextWatcher并实现其方法: public void afterTextChanged(Editable arg0) { // 文字改变后出发事件 String content = ed

  • Android编程自定义View时添加自己的监听器示例

    本文实例讲述了Android编程自定义View时添加自己的监听器.分享给大家供大家参考,具体如下: 监听器在Java中非常常用,在自定义控件时可能根据自己的需要去监听一些数据的改变,这时就需要我们自己去写监听器,Java中的监听器实际上就是C++中的回调函数,在初始化时设置了这个函数,由某个事件触发这个函数被调用,两个类之间的数据通信也可以通过监听器来实现.要定义监听器就要先定义一个接口,具体功能由设置监听器的类去实现 关键代码实现 package com.example.listviewite

  • Android EditText 监听用户输入完成的实例

    我们都知道, Android EditText输入框,并没有监听用户输入完成的功能,需要我们自己实现. 下面是实现的方法,仅供参考: EditText editText = (EditText) findViewById(R.id.edit); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, i

  • Android 7.0 监听网络变化的示例代码

    Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可. public class NetChangeReceiver extends BroadcastReceiver { private static final String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; @Override public void onReceive(Context conte

  • Android监听横竖屏切换功能

    偶然在项目中用到播放视频时,需要横屏将视频全屏播放,所以需要监听屏幕的横竖屏切换事件. 横竖屏切换监听效果: ConfigChanges,用于捕获手机状态的改变,当横竖屏切换,屏幕尺寸变化,弹出键盘,系统设置改变等条件,就会触发回调事件onConfigurationChanged.让Activity捕捉到该事件,需要做如下步骤: 声明Activity需要捕捉的事件类型,在manifest的配置: <activity android:name=".MainActivity" and

  • Android控件Spinner实现下拉列表及监听功能

    在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可.这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner. 方法一: 以资源方式,静态展示 Spinner 选项: <Spinner android:layout_width="match_parent" android:layout_height="wrap_conte

  • android监听View加载完成的示例讲解

    最近项目中需要实现一个GridView显示6*5=30项,并铺满整个界面,界面中还有自定义ActionBar等其他控件,所以需要获取剩下屏幕的高度.通过百度得知View有一个监听函数,亲测使用有效,特此记录,方便日后查阅. gv_test.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayo

  • Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔

    最近在公司用到外设,需要判断接入的外设的VendorId和ProductId,然后给大家说一下自己的学习成果把 ,首先我门可以通过android.hardware.usb.action.USB_STATE监听自己的Usb连接的设备,只针对Usb设备.而想要监听外部设备的时候却需要另外的两个广播进行监听"android.hardware.usb.action.USB_DEVICE_ATTACHED"和"android.hardware.usb.action.USB_DEVICE

  • android实现可自由移动、监听点击事件的悬浮窗

    最近因为项目需要,自己实现了个可以自由移动,并且长按可以跳出一个控制播放的,大的悬浮窗. 好,开始吧.首先我们先聊权限,悬浮窗需要在manifest中声明一个权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 然后呢,嗯,我们来讲讲关于悬浮窗实现的原理. 在Andriod中,所有的界面元素都要通过windowmanger来实现,像Activity.Fragment等等这些

随机推荐