aosiyiliaouniapp/components/dayin/printer.js

342 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//搜索蓝牙打印机函数
var SearchBluetooth = function() {
/*dom变量定义*/
var BluetoothBtn = document.getElementById("BluetoothBtn"), //最下边的按钮
unpairedList = document.getElementById("unpairedList"), //未配对设备列表
pairedList = document.getElementById("pairedList"), //已配对设备列表
loadImgHtml = '<img src="images/ring.gif" class="loadImg"/>'; //加载图像HTML
/*plus变量定义*/
var main, BluetoothAdapter, BAdapter, IntentFilter, BluetoothDevice, receiver , receiverStart;
/*其他定义*/
var isSearchDevices = false, //是否处于搜索状态
savedBleId = localStorage.getItem("bleId"), //缓存的设备ID
IntervalObj, //定时器对象
BleDeviceObjAry = [], //BleDevice对象数组
debug = true; //调试模式
return {
//初始化方法
Init: function() {
main = plus.android.runtimeMainActivity(),
BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"),
IntentFilter = plus.android.importClass('android.content.IntentFilter'),
BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice"),
BAdapter = new BluetoothAdapter.getDefaultAdapter();
this.CheckPermissions();
},
CheckPermissions: function() {
var self = this;
plus.android.requestPermissions(['android.permission.ACCESS_FINE_LOCATION','android.permission.ACCESS_COARSE_LOCATION',
'android.permission.BLUETOOTH','android.permission.BLUETOOTH_ADMIN'], function(e){
if(e.deniedAlways.length>0){ //权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
debug && console.log("获取失败,权限被永久拒绝...");
}
if(e.deniedPresent.length>0){ //权限被临时拒绝
// 弹出提示框解释为何需要定位权限可再次调用plus.android.requestPermissions申请权限
debug && console.log("获取失败,权限被临时拒绝...");
}
if(e.granted.length>0){ //权限被允许
debug && console.log("获取权限成功,调用搜索...");
//调用依赖获取权限的代码
self.CheckBluetoothState();
self.EventInit();
}
}, function(e){
console.log('Request Permissions error:'+JSON.stringify(e));
});
},
//事件绑定
EventInit: function() {
var self = this,
bdevice = new BluetoothDevice();
//搜索
BluetoothBtn.addEventListener("tap", function() {
if(!isSearchDevices) {
self.SearchDevices();
}
});
/*未配对列表点击事件*/
mui("#unpairedList").on("tap", "li", function() {
var id = this.getAttribute("data-id"),
state = true;
self.SetButtonStatus("正在配对...", true);
for(var i = 0, l = BleDeviceObjAry.length; i < l; i++) {
var BleDeviceItem = BleDeviceObjAry[i];
main.unregisterReceiver(receiver); //取消监听
if(BleDeviceItem.getAddress() === id) {
BleDeviceItem.createBond();
self.SetButtonStatus("正在配对...", true);
var testBondState = setInterval(function() {
if(BleDeviceItem.getBondState() === bdevice.BOND_BONDED) {
mui.toast("配对成功");
self.SetButtonStatus("配对成功正在尝试连接打印机发送数据...", true);
localStorage.setItem("bleId", id);
var bleObj = new ConnectPrinter(id);
bleObj = null;
window.clearInterval(testBondState);
} else if(BleDeviceItem.getBondState() === bdevice.BOND_NONE) {
mui.toast("配对失败");
window.clearInterval(testBondState);
self.SetButtonStatus("重新搜索设备", false);
}
}, 1000);
state = false;
break;
}
}
if(state) {
mui.toast("配对失败请重新搜索设备");
self.SetButtonStatus("重新搜索设备", false);
}
});
/*已配对列表点击事件*/
mui("#pairedList").on("tap", "li", function() {
var id = this.getAttribute("data-id");
if(id) {
self.SetButtonStatus("配对成功正在尝试连接打印机发送数据...", true);
localStorage.setItem("bleId", id);
var bleObj = new ConnectPrinter(id);
bleObj = null;
}
});
},
//检测蓝牙状态
CheckBluetoothState: function() {
var self = this;
var filter = new IntentFilter();
receiverStart = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: onReceiveStart
});
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
main.registerReceiver(receiverStart, filter); //注册监听事件
//监听回调函数
function onReceiveStart(context, intent) {
plus.android.importClass(intent); //通过intent实例引入intent类方便以后的.’操作
var state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR)
if(state === BluetoothAdapter.STATE_ON) {
debug && console.log("检测到蓝牙开启,准备搜索蓝牙设备...");
self.SearchDevices();
}
}
if(!BAdapter.isEnabled()) {
var AlertDialog = plus.android.importClass('android.app.AlertDialog');
var adb = plus.android.newObject("android.app.AlertDialog$Builder",plus.android.runtimeMainActivity());
adb.setTitle("蓝牙处于关闭状态,是否打开?");
var listener = plus.android.implements('android.content.DialogInterface$OnClickListener',{
onClick:function(dialog,which){
BAdapter.enable();
debug && console.log("蓝牙处于关闭状态,正在打开...");
}
});
adb.setPositiveButton("确定",listener);
adb.setNegativeButton("取消",null);
adb.setCancelable(false);
adb.show();
} else {
self.SearchDevices();
debug && console.log("蓝牙处于开启状态,准备搜索蓝牙设备...");
}
},
//搜索设备
SearchDevices: function() {
var self = this;
var arr_mac = [];
isSearchDevices = true;
self.SetButtonStatus("正在搜索蓝牙设备...", true);
debug && console.log("开始搜索蓝牙设备...");
var filter = new IntentFilter(),
bdevice = new BluetoothDevice();
BleDeviceObjAry = []; //清空BleDeviceObjAry
unpairedList.innerHTML = '';
pairedList.innerHTML = '';
BAdapter.startDiscovery(); //开启搜索
receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: onReceiveFn
});
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); //注册监听事件
//监听回调函数
function onReceiveFn(context, intent) {
plus.android.importClass(intent); //通过intent实例引入intent类方便以后的.’操作
//开始搜索改变状态
intent.getAction() === "android.bluetooth.device.action.FOUND" && (isSearchDevices = true);
//判断是否搜索结束
if(intent.getAction() === 'android.bluetooth.adapter.action.DISCOVERY_FINISHED') {
main.unregisterReceiver(receiver); //取消监听
isSearchDevices = false;
BleDeviceObjAry = [];
self.SetButtonStatus("重新搜索设备", false);
return false;
}
var BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE),
bleName = BleDevice.getName(), //设备名称
bleId = BleDevice.getAddress(); //设备mac地址
if(!bleName || !bleId) {
return false;
}
if(arr_mac.indexOf(bleId)>= 0){
return;
}
arr_mac.push(bleId);
//判断是否配对
if(BleDevice.getBondState() === bdevice.BOND_BONDED) {
debug && console.log("已配对蓝牙设备:" + bleName + ' ' + bleId);
self.SetpairedListHtml(pairedList, bleName, bleId);
//如果缓存保存的设备ID和该ID一致则配对
if(savedBleId == bleId) {
BleDevice.createBond();
}
} else {
debug && console.log("未配对蓝牙设备:" + bleName + ' ' + bleId);
BleDeviceObjAry.push(BleDevice);
self.SetpairedListHtml(unpairedList, bleName, bleId);
}
}
function isRepeat(arr){
var hash = {};
for(var i in arr) {
if(hash[arr[i]]) //hash 哈希
return true;
hash[arr[i]] = true;
}
return false;
}
},
//设置设备列表HTML
SetpairedListHtml: function(parentEl, bleName, bleId) {
var li = document.createElement('li');
li.setAttribute("data-id", bleId);
li.innerHTML = bleName + "<span>" + bleId + "</span>";
parentEl.appendChild(li);
},
//更改按钮状态
SetButtonStatus: function(tipText, isDisabled) {
if(isDisabled) {
BluetoothBtn.innerHTML = loadImgHtml + tipText;
BluetoothBtn.classList.add("mui-disabled");
} else {
BluetoothBtn.innerHTML = tipText;
BluetoothBtn.classList.remove("mui-disabled");
}
}
}
}();
//连接打印机和打印
function dayin(window) {
window.ConnectPrinter = function(bleId) {
var plusMain = 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(bleId);
plus.android.importClass(device);
var bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
plus.android.importClass(bluetoothSocket);
if(!bluetoothSocket.isConnected()) {
connectStart = bluetoothSocket.connect();
}
var outputStream = bluetoothSocket.getOutputStream();
plus.android.importClass(outputStream);
var bytes = [0x1b,0x61,0x01];
outputStream.write(bytes);
var bytes = [0x1c,0x21,(0x04|0x08)];
outputStream.write(bytes);
var bytes = [0x1b,0x21,0x08];
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = plus.android.invoke('华夏银行', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = plus.android.invoke('XX支行', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = [0x1c,0x21,0x00];
outputStream.write(bytes);
var bytes = [0x1b,0x21,0x00];
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = plus.android.invoke('欢迎您的光临', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = plus.android.invoke('您的排队号码', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = [0x1b,0x21,(0x08|0x20|0x10)];
outputStream.write(bytes);
var bytes = plus.android.invoke('1006', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = [0x1b,0x21,0x00];
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = plus.android.invoke(' 现有8人在等候请您到休息厅等候呼叫', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
var bytes = plus.android.invoke('2019-9-12 10:15:51', 'getBytes', 'gbk');
outputStream.write(bytes);
var bytes = [0x0d,0x0a];
outputStream.write(bytes);
outputStream.flush();
this.closeBtSocket = function() {
bluetoothSocket.close();
bluetoothSocket = null;
device = null;
};
};
};