Native.js獲取監(jiān)聽(tīng)開(kāi)關(guān)等操作Android藍(lán)牙設(shè)備實(shí)例代碼
Native.js開(kāi)啟關(guān)閉藍(lán)牙
var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager);//引入相關(guān)的method函數(shù)
var BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter);//引入相關(guān)的method函數(shù),這樣之后才會(huì)有isEnabled函數(shù)支持
if(!BAdapter.isEnabled()) {
BAdapter.enable();
}
Native.js監(jiān)聽(tīng)藍(lán)牙開(kāi)關(guān)狀態(tài)
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) { //實(shí)現(xiàn)onReceiver回調(diào)函數(shù)
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); //監(jiān)聽(tīng)藍(lán)牙開(kāi)關(guān)
main.registerReceiver(receiver, filter); //注冊(cè)監(jiān)聽(tīng)
if (!BAdapter.isEnabled()) {
BAdapter.enable(); //啟動(dòng)藍(lán)牙
}else{
BAdapter.disable();
}
Native.js獲取藍(lán)牙設(shè)備列表
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藍(lán)牙連接票據(jù)打印機(jī)
測(cè)試機(jī):佳博PT-280便攜打印機(jī)
手機(jī):華為低端
功能:掃描周?chē){(lán)牙設(shè)備加入列表,點(diǎn)擊未配對(duì)設(shè)備,自動(dòng)配對(duì)設(shè)備,點(diǎn)擊已配對(duì)設(shè)備,進(jìn)行打印測(cè)試
html頁(yè)面代碼
<!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="搜索設(shè)備" onclick="searchDevices('a')"></p>
</div>
<div>
未配對(duì)藍(lán)牙設(shè)備
<ul id="list1">
</ul>
</div>
<div>
已配對(duì)藍(lán)牙設(shè)備
<ul id="list2">
</ul>
</div>
</body>
</html>
Js文件
//address=""搜索藍(lán)牙//address=設(shè)備mac地址,自動(dòng)配對(duì)給出mac地址的設(shè)備
function searchDevices(address) {
//注冊(cè)類(lèi)
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("開(kāi)始搜索設(shè)備");
var filter = new IntentFilter();
var bdevice = new BluetoothDevice();
var on = null;
var un = null;
var vlist1 = document.getElementById("list1"); //注冊(cè)容器用來(lái)顯示未配對(duì)設(shè)備
vlist1.innerHTML = ""; //清空容器
var vlist2 = document.getElementById("list2"); //注冊(cè)容器用來(lái)顯示未配對(duì)設(shè)備
vlist2.innerHTML = ""; //清空容器
var button1 = document.getElementById("bt1");
button1.disabled=true;
button1.value="正在搜索請(qǐng)稍候";
BAdapter.startDiscovery(); //開(kāi)啟搜索
var receiver;
receiver = plus.android.implements("io.dcloud.android.content.BroadcastReceiver", {
onReceive: function(context, intent) { //實(shí)現(xiàn)onReceiver回調(diào)函數(shù)
plus.android.importClass(intent); //通過(guò)intent實(shí)例引入intent類(lèi),方便以后的‘.'操作
console.log(intent.getAction()); //獲取action
if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED"){
main.unregisterReceiver(receiver);//取消監(jiān)聽(tīng)
button1.disabled=false;
button1.value="搜索設(shè)備";
console.log("搜索結(jié)束");
}else{
BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//判斷是否配對(duì)
if (BleDevice.getBondState() == bdevice.BOND_NONE) {
console.log("未配對(duì)藍(lán)牙設(shè)備:" + BleDevice.getName() + " " + BleDevice.getAddress());
//參數(shù)如果跟取得的mac地址一樣就配對(duì)
if (address == BleDevice.getAddress()) {
if (BleDevice.createBond()) { //配對(duì)命令.createBond()
console.log("配對(duì)成功");
var li2 = document.createElement("li"); //注冊(cè)
li2.setAttribute("id", BleDevice.getAddress()); //打印機(jī)mac地址
li2.setAttribute("onclick", "print(id)"); //注冊(cè)click點(diǎn)擊列表進(jìn)行打印
li2.innerText = BleDevice.getName();
vlist2.appendChild(li2);
}
} else {
if(BleDevice.getName() != on ){ //判斷防止重復(fù)添加
var li1 = document.createElement("li"); //注冊(cè)
li1.setAttribute("id", BleDevice.getAddress()); //打印機(jī)mac地址
li1.setAttribute("onclick", "searchDevices(id)"); //注冊(cè)click點(diǎn)擊列表進(jìn)行配對(duì)
on = BleDevice.getName();
li1.innerText = on;
vlist1.appendChild(li1);
}
}
} else {
if(BleDevice.getName() != un ){ //判斷防止重復(fù)添加
console.log("已配對(duì)藍(lán)牙設(shè)備:" + BleDevice.getName() + " " + BleDevice.getAddress());
var li2 = document.createElement("li"); //注冊(cè)
li2.setAttribute("id", BleDevice.getAddress()); //打印機(jī)mac地址
li2.setAttribute("onclick", "print(id)"); //注冊(cè)click點(diǎn)擊列表進(jìn)行打印
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); //注冊(cè)監(jiān)聽(tīng)
}
var device = null,
BAdapter = null,
BluetoothAdapter = null,
uuid = null,
main = null,
bluetoothSocket = null;
function print(mac_address) {
if (!mac_address) {
mui.toast("請(qǐng)選擇藍(lán)牙打印機(jī)");
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("檢測(cè)到設(shè)備未連接,嘗試連接....");
bluetoothSocket.connect();
}
console.log("設(shè)備已連接");
if (bluetoothSocket.isConnected()) {
var outputStream = bluetoothSocket.getOutputStream();
plus.android.importClass(outputStream);
var string = "打印測(cè)試\r\n";
var bytes = plus.android.invoke(string, "getBytes", "gbk");
outputStream.write(bytes);
outputStream.flush();
device = null //這里關(guān)鍵
bluetoothSocket.close(); //必須關(guān)閉藍(lán)牙連接否則意外斷開(kāi)的話(huà)打印錯(cuò)誤
}
}
以上是針對(duì)Native.js對(duì)Android藍(lán)牙設(shè)備的操作實(shí)例代碼,如果你想了解Native.js的其它實(shí)例代碼或原生的Android藍(lán)牙操作方法請(qǐng)查看下面的相關(guān)鏈接
- Android Native 內(nèi)存泄漏系統(tǒng)化解決方案
- Android使用google breakpad捕獲分析native cash
- native.js獲取手機(jī)硬件基本信息實(shí)例代碼android版
- react-native android狀態(tài)欄的實(shí)現(xiàn)
- Android Native庫(kù)的加載及動(dòng)態(tài)鏈接的過(guò)程
- Android實(shí)現(xiàn)H5與Native交互的兩種方式
- Windows下React Native的Android環(huán)境部署及布局示例
- 捕獲與解析Android NativeCrash
相關(guān)文章
詳解Xamarin.Android 利用Fragment實(shí)現(xiàn)底部菜單
這篇文章主要介紹了詳解Xamarin.Android 利用Fragment實(shí)現(xiàn)底部菜單,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
實(shí)例解析Android系統(tǒng)中的ContentProvider組件用法
這篇文章主要介紹了Android系統(tǒng)中的ContentProvider組件用法,舉例講解了ContentProvider傳遞數(shù)據(jù)及監(jiān)聽(tīng)ContentProvider數(shù)據(jù)改變的方法,十分詳細(xì),需要的朋友可以參考下2016-04-04
Android基于OpenCV實(shí)現(xiàn)QR二維碼檢測(cè)
QR碼比普通一維條碼具有快速讀取和更大的存儲(chǔ)資料容量,也無(wú)需要像一維條碼般在掃描時(shí)需要直線(xiàn)對(duì)準(zhǔn)掃描儀。因此其應(yīng)用范圍已經(jīng)擴(kuò)展到包括產(chǎn)品跟蹤,物品識(shí)別,文檔管理,庫(kù)存營(yíng)銷(xiāo)等方面。本文講解Android基于OpenCV實(shí)現(xiàn)QR二維碼檢測(cè)的步驟2021-06-06
Android編程四大組件之Activity用法實(shí)例分析
這篇文章主要介紹了Android編程四大組件之Activity用法,實(shí)例分析了Activity的創(chuàng)建,生命周期,內(nèi)存管理及啟動(dòng)模式等,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-01-01
Android ListView實(shí)現(xiàn)無(wú)限循環(huán)滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)無(wú)限循環(huán)滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
詳解Android中fragment和viewpager的那點(diǎn)事兒
本文主要對(duì)Android中fragment和viewpager進(jìn)行詳細(xì)介紹,具有一定的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12
利用smsmanager實(shí)現(xiàn)后臺(tái)發(fā)送短信示例
這篇文章主要介紹了android利用SmsManager可以實(shí)現(xiàn)后臺(tái)發(fā)送短信的方法,最近有使用說(shuō)明,大家可以參考使用2014-01-01
Android仿京東淘寶自動(dòng)無(wú)限循環(huán)輪播控件思路詳解
在A(yíng)pp的開(kāi)發(fā)中,很多的時(shí)候都需要實(shí)現(xiàn)類(lèi)似京東淘寶一樣的自動(dòng)無(wú)限輪播的廣告欄,這里小編寫(xiě)了一個(gè),分享到腳本之家平臺(tái)供大家參考2017-04-04

