小程序app技術(shù)(小程序 技術(shù))
互聯(lián)網(wǎng)外包公司在提供企業(yè)定制開發(fā)小程序過程,由于業(yè)務(wù)需要,需要在應(yīng)用中集成數(shù)據(jù)打印功能,由于項(xiàng)目是基于uni-app開發(fā)并發(fā)布成微信小程序。微信小程序和uni-app 的連接藍(lán)牙API接口規(guī)范都是一樣的,只不過微信小程序是掛載到wx 對(duì)象上,而uni-app則是掛載在了uni 對(duì)象上。使用uni-app開發(fā)的技術(shù)工程師可以直接使用微信的接口(前提是后期將項(xiàng)目發(fā)布到微信小程序平臺(tái))。
點(diǎn)擊輸入圖片描述(最多30字)
在介紹微信小程序藍(lán)牙連接打印之前,常州開發(fā)微信小程序公司https://www.dianzan51.com點(diǎn)個(gè)贊科技,簡單梳理一下連接藍(lán)牙打印進(jìn)行打印操作的流程圖。后續(xù)的開發(fā)將圍繞流程圖展開。
1 、初始化藍(lán)牙模塊。
打開藍(lán)牙適配器
其他藍(lán)牙相關(guān) API 必須在 `uni.openBluetoothAdapter`[4] 調(diào)用之后使用。否則 API 會(huì)返回錯(cuò)誤(errCode=10000)。
展開全文
uni.openBluetoothAdapter({
success(res) {
console.log(res)
2 、獲取藍(lán)牙適配器狀態(tài)
理論上這步可以省略,不過為了確保程序不錯(cuò)意外,還是按部就班,在搜索藍(lán)牙之前確保本機(jī)藍(lán)牙狀態(tài)正確。
3、搜索藍(lán)牙設(shè)備
在「步驟3.2的成功回調(diào)函數(shù)」里調(diào)用uni.startBluetoothDevicesDiscovery 接口搜索附近可用的藍(lán)牙設(shè)備。
uni.startBluetoothDevicesDiscovery({
success(res) {
console.log(res)
開始搜尋附近的藍(lán)牙外圍設(shè)備。(此操作比較耗費(fèi)系統(tǒng)資源,請(qǐng)?jiān)谒阉鞑⑦B接到設(shè)備后調(diào)用 「**`uni.stopBluetoothDevicesDiscovery`**[5]」 方法停止搜索。)
4、 列出所有發(fā)現(xiàn)的藍(lán)牙設(shè)備列表
在「步驟3.3 的成功回調(diào)」里面使用uni.getBluetoothDevices 接口獲取藍(lán)牙模塊生效期間所有已發(fā)現(xiàn)的藍(lán)牙設(shè)備。包括已經(jīng)和本機(jī)處于連接狀態(tài)的設(shè)備。由于藍(lán)牙搜索需要一定過程,因此可以設(shè)置一定的延遲時(shí)間再執(zhí)行uni.getBluetoothDevices 接口。
uni.startBluetoothDevicesDiscovery({
success: function(res) {
console.log(res);
setTimeout(function() {
uni.getBluetoothDevices({
success: function(res) {
var devices = [];
var num = 0;
for (var i = 0; i res.devices.length; ++i) {
if (res.devices[i].name != "未知設(shè)備") {
devices[num] = res.devices[i];
num++;
// 將發(fā)現(xiàn)的藍(lán)牙設(shè)備存儲(chǔ)起來,以下代碼僅供參考
that.setData({
list: devices,
isScanning: false
uni.hideLoading();
uni.stopPullDownRefresh();
uni.stopBluetoothDevicesDiscovery({
success: function(res) {
console.log("停止搜索藍(lán)牙");
}, 5000);
5、連接目標(biāo)設(shè)備
連接低功耗藍(lán)牙設(shè)備。若APP在之前已有搜索過某個(gè)藍(lán)牙設(shè)備,并成功建立連接,可直接傳入之前搜索獲取的 deviceId 直接嘗試連接該設(shè)備,無需進(jìn)行搜索操作。
注意這里使用的是低功耗藍(lán)牙設(shè)備接口
uni.createBLEConnection({
deviceId: e.currentTarget.dataset.title, // 設(shè)備id
success: function(res) {
console.log(res);
app.globalData.BLEInformation.deviceId = e.currentTarget.dataset.title;
that.getSeviceId();
},
fail: function(e) {
uni.showModal({
title: "提示",
content: "連接失敗",
showCancel: false
console.log(e);
uni.hideLoading();
},
complete: function(e) {
console.log(e);
在連接目標(biāo)設(shè)備過程需要注意如下幾點(diǎn):
1)、請(qǐng)保證盡量成對(duì)的調(diào)用 createBLEConnection 和 closeBLEConnection 接口。安卓如果多次調(diào)用 createBLEConnection 創(chuàng)建連接,有可能導(dǎo)致系統(tǒng)持有同一設(shè)備多個(gè)連接的實(shí)例,導(dǎo)致調(diào)用closeBLEConnection 的時(shí)候并不能真正的斷開與設(shè)備的連接。
2)、藍(lán)牙連接隨時(shí)可能斷開,建議監(jiān)聽 `uni.onBLEConnectionStateChange`[6] 回調(diào)事件,當(dāng)藍(lán)牙設(shè)備斷開時(shí)按需執(zhí)行重連操作。
3)、若對(duì)未連接的設(shè)備或已斷開連接的設(shè)備調(diào)用數(shù)據(jù)讀寫操作的接口,會(huì)返回 10006 錯(cuò)誤,建議進(jìn)行重連操作。
6、操作打印機(jī)
操作打印機(jī)本質(zhì)上就是通過uni.writeBLECharacteristicValue(OBJECT)接口向藍(lán)牙設(shè)備寫指令。
這里需要注意的是不同的打印機(jī)可能指令集不同。不過就我目前了解的情況來看市面上的小型藍(lán)牙打印機(jī)主要分標(biāo)簽打印機(jī)和票據(jù)打印機(jī)兩種。而這兩種打印機(jī)指令集又有所區(qū)別。
界面參考和打印效果
以下界面由常州開發(fā)微信小程序公司點(diǎn)個(gè)贊科技,技術(shù)工程師實(shí)現(xiàn)藍(lán)牙打印機(jī)店家提供的微信小程序源碼反編譯為uni-app項(xiàng)目而來。同時(shí)修復(fù)了源碼中會(huì)導(dǎo)致藍(lán)牙連接失敗的錯(cuò)誤,僅測試,代碼可完整運(yùn)行,可成功操作標(biāo)簽打印機(jī)和票據(jù)打印機(jī)實(shí)現(xiàn)打印功能。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。