蓝牙打印和网口打印的实现
生活随笔
收集整理的這篇文章主要介紹了
蓝牙打印和网口打印的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
藍牙打印的js
export default {install(Vue,options){// 藍牙搜索方法Vue.prototype.SearchBluetooth = function () {/*plus變量定義*/var main, BluetoothAdapter, BAdapter, IntentFilter, BluetoothDevice, receiver;/*其他定義*/var isSearchDevices = false, //是否處于搜索狀態debug = false; //調試模式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();return {// 檢查藍牙是否開啟CheckBluetoothState:function(){return BAdapter.isEnabled();},// 開啟藍牙StartBluetooth:function(CallBack){var self = this; if(!BAdapter.isEnabled()) { // isEnabled判斷藍牙狀態plus.nativeUI.confirm("藍牙處于關閉狀態,是否打開?", function(e) {if(e.index == 0) {var enable = BAdapter.enable(); // 請求開啟藍牙console.log(enable); CallBack(true);}else{CallBack(false);}});}},// 開始搜索設備StartSeatch:function(CallBack,errcallback){try {var self = this;isSearchDevices = true;var filter = new IntentFilter(),bdevice = new BluetoothDevice();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;errcallback();return;}var BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE), // 設備對象bleName = BleDevice.getName(), //設備名稱bleId = BleDevice.getAddress(); //設備mac地址console.dir(JSON.stringify(BleDevice));if(!bleName || !bleId) {CallBack(false);}//判斷是否配對if(BleDevice.getBondState() === bdevice.BOND_BONDED) { // 已配對的藍牙設備CallBack({BleDevice:BleDevice,bleName:bleName, // 設備名稱bleId:bleId, // 設備idisPaired:true,is_active:false});} else { // 未配對的藍牙設備CallBack({BleDevice:BleDevice,bleName:bleName, // 設備名稱bleId:bleId, // 設備idisPaired:false});}}}catch(err) {errcallback();} },// 配對藍牙設備Bluepairing:function(BleDevice,bleId,CallBack,ErrCallBack){try {var self = this,bdevice = new BluetoothDevice(), // new java android.bluetooth.BluetoothDevice對象BleDeviceItem = BleDevice; // 賦值設備if(BleDeviceItem.getAddress() === bleId){BleDeviceItem.createBond(); // 設備進行配對var timeout = setInterval(function(){ // 創建定時器輪詢配對結果if(BleDeviceItem.getBondState() === bdevice.BOND_BONDED) { // 配對成功window.clearInterval(timeout);CallBack({status:true,errmsg:'配對成功'});} else if(BleDeviceItem.getBondState() === bdevice.BOND_NONE) { // 配對失敗window.clearInterval(timeout);ErrCallBack({status:false,errmsg:'配對失敗,請嘗試重新配對'});}},1000);}else{ErrCallBack({status:false,errmsg:'設備有誤'});}}catch(err) {ErrCallBack({status:false,errmsg:'異常錯誤'});} },CancelSearch:function(){ // 取消搜索main.unregisterReceiver(receiver); //取消監聽},}};// 打印機連接方法Vue.prototype.ConnectPrinter = {// 首次new這個類會創建進行連接BluePrinter: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()) {try {bluetoothSocket.connect();} catch (e) {console.log(e);} }// 判斷是否連接 沒有連接則連接this.Print = function(byteStr){ // 打印的方法var outputStream = bluetoothSocket.getOutputStream();plus.android.importClass(outputStream);var bytes = plus.android.invoke(byteStr, 'getBytes', 'gbk');try {outputStream.write(bytes);} catch (e) {mui.toast('打印失敗!');} outputStream.flush();device = null;// bluetoothSocket.close();console.log(2);};// 檢查是否連接this.ConnectStatus = function(){return bluetoothSocket.isConnected();};// 關閉連接this.CloseConnect = function(){bluetoothSocket.close();};// 連接方法this.ConnectDevice = function(){try{bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);bluetoothSocket.connect();}catch(err){console.log(err.message);return false;}};// 保存當前連接的bleId 用于判斷使用單例模式this.BleId = bleId;}};}}網口打印的js
export default {sockets:false,connectstatus:false,printIns:'',socketconnect:function(ip,port){try{if(plus.os.name=='Android'){var res = this.androidconnect(ip,port);return res;}if(plus.os.name == 'iOS'){}}catch(e){mui.toast("連接錯誤");return false;}},print:function(datastr,mm){this.printIns.println(datastr);this.sockets.close();},androidconnect:function(ip,port){if(this.sockets){if(this.sockets.isConnected() && !this.sockets.isClosed()){}else{var res = this.connectsockte(ip,port);return res;}}else{var res = this.connectsockte(ip,port);return res;}},connectsockte(ip,port){try{var Socket = plus.android.importClass("java.net.Socket");var PrintWriter = plus.android.importClass("java.io.PrintWriter");var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");var BufferedReader = plus.android.importClass("java.io.BufferedReader");var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");var SocketAddress = plus.android.importClass("java.net.InetSocketAddress");//測試改良var StrictMode = plus.android.importClass("android.os.StrictMode");var Build = plus.android.importClass("android.os.Build");if (Build.VERSION.SDK_INT > 9) {var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);}var socket = new Socket();var socketAddr = new SocketAddress(ip,port);socket.connect(socketAddr,2000);var outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(),'gbk');var bufferWriter = new BufferedWriter(outputStreamWriter);var out = new PrintWriter(bufferWriter, true);this.sockets = socket;this.printIns = out;mui.toast("連接成功");return true;}catch(e){mui.toast("連接打印機失敗");return false;}},socketclose:function(){this.sockets.close();} }具體domo地址
https://github.com/Sun-Traget/print
總結
以上是生活随笔為你收集整理的蓝牙打印和网口打印的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于 Layui 的富文本编辑器和封面的
- 下一篇: powerdesigner生成表sql语