ios開(kāi)發(fā)打印機(jī)功能,ios網(wǎng)絡(luò)打印

iOS開(kāi)發(fā)之藍(lán)牙/Socket鏈接小票打印機(jī)(二)

上一篇 主要介紹了部分ESC/POS指令集,包括一些常用的排版指令,打印位圖指令等。另外,還介紹了將圖片轉(zhuǎn)換成點(diǎn)陣圖的方法。在這篇文章中,將主要介紹通過(guò)藍(lán)牙和Socket連接打印機(jī),發(fā)送打印指令相關(guān)知識(shí)。這里將用到 CoreBluetooth.framework 和 CocoaAsyncSocket 。

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出呼中免費(fèi)做網(wǎng)站回饋大家。

藍(lán)牙是一種支持設(shè)備間短距離通訊的無(wú)線電技術(shù)。iOS系統(tǒng)中,有四個(gè)框架支持藍(lán)牙鏈接:

CoreBluetooth框架有兩個(gè)核心概念,central(中心)和 peripheral(外設(shè)),它們分別有自己對(duì)應(yīng)的API;這里顯然是手機(jī)作為central,藍(lán)牙打印機(jī)作為peripheral;

設(shè)置代理后,會(huì)回調(diào)此方法,確認(rèn)藍(lán)牙狀態(tài),當(dāng)狀態(tài)為 CBCentralManagerStatePoweredOn 才能去掃描設(shè)備,藍(lán)牙狀態(tài)變化時(shí),也會(huì)回調(diào)此方法

調(diào)用此方法開(kāi)始掃描外設(shè)

注意:第一個(gè)參數(shù)指定一個(gè) CBUUID 對(duì)象數(shù)組,每個(gè)對(duì)象表示外圍設(shè)備正在通告的服務(wù)的通用唯一標(biāo)識(shí)符(UUID)。此時(shí),僅返回公布這些服務(wù)的外設(shè)。當(dāng)參數(shù)為 nil ,則返回所有已發(fā)現(xiàn)的外設(shè),而不管其支持的服務(wù)是什么。

當(dāng)掃描到4.0外設(shè)后會(huì)回調(diào)此方法,這里包含設(shè)備的相關(guān)信息,如名稱、UUID、信號(hào)強(qiáng)度等;

調(diào)用此方法連接外設(shè)

[self.centralManager connectPeripheral:peripheral options:nil];

注意:第一個(gè)參數(shù)是要連接的外設(shè)。第二個(gè)參數(shù) options 是可選的 NSDictionary ,系統(tǒng)定義了一下三個(gè)鍵,它們的值都是NSNumber (Boolean);默認(rèn)為NO。當(dāng)設(shè)置為YES,則應(yīng)用進(jìn)入后臺(tái)或者被掛起后,系統(tǒng)會(huì)用Alert通知藍(lán)牙外設(shè)的狀態(tài)變化,效果是這樣

連接成功或失敗,都有對(duì)應(yīng)的回調(diào)方法

連接成功后設(shè)置代理 peripheral.delegate = self ,調(diào)用 [peripheral discoverServices:nil]; 尋找外設(shè)內(nèi)的服務(wù)。這里的參數(shù)是一個(gè)存放 CBUUID 對(duì)象的數(shù)組,用于發(fā)現(xiàn)特定的服務(wù)。當(dāng)傳nil時(shí),表示發(fā)現(xiàn)外設(shè)內(nèi)所有的服務(wù)。發(fā)現(xiàn)服務(wù)后系統(tǒng)會(huì)回調(diào)下面的方法:

發(fā)現(xiàn)服務(wù)后,調(diào)用 [peripheral discoverCharacteristics:nil forService:service]; 去發(fā)現(xiàn)服務(wù)中包含的特征。和上面幾個(gè)方法一樣,第一個(gè)參數(shù)用于發(fā)現(xiàn)指定的特征。為nil時(shí),表示發(fā)現(xiàn)服務(wù)的所有特征。

當(dāng)掃描到寫入特征時(shí),保存,用于寫入數(shù)據(jù)。

寫入數(shù)據(jù),我們只需要調(diào)用方法

這里的 self.peripheral 就是連接的外設(shè), self.characteristicInfo 就是之前保存的寫入特征;這里最好使用 CBCharacteristicPropertyWrite 特征,并且 type 選擇 CBCharacteristicWriteWithResponse 。當(dāng)寫入數(shù)據(jù)成功后,系統(tǒng)會(huì)通過(guò)下面這個(gè)方法通知我們:

由于藍(lán)牙設(shè)備每次可寫入的數(shù)據(jù)量是有限制的,因此,我們需要將之前拼接的打印數(shù)據(jù)進(jìn)行拆分,分批發(fā)送給打印機(jī)

這里的 MAX_CHARACTERISTIC_VALUE_SIZE 是個(gè)宏定義,表示每次發(fā)送的數(shù)據(jù)長(zhǎng)度,經(jīng)筆者測(cè)試,當(dāng) MAX_CHARACTERISTIC_VALUE_SIZE = 20 時(shí),打印文字是正常速度。但打印圖片的速度非常慢, 應(yīng)該在硬件允許的范圍內(nèi),每次發(fā)盡量多的數(shù)據(jù)。 不同品牌型號(hào)的打印機(jī),這個(gè)參數(shù)是不同的,筆者的藍(lán)牙打印機(jī)該值最多到140。超出后會(huì)出現(xiàn)無(wú)法打印問(wèn)題。 最后筆者將該值定為 MAX_CHARACTERISTIC_VALUE_SIZE = 120 ,測(cè)試了公司幾臺(tái)打印機(jī)都沒(méi)有問(wèn)題。

另外iOS9以后增加了方法 maximumWriteValueLengthForType: 可以獲取寫入特診的最大寫入數(shù)據(jù)量,但經(jīng)筆者測(cè)試,對(duì)于部分打印機(jī)(比如我們公司的)是不準(zhǔn)確的,因此,不要太依賴此方法,最好還是自己取一個(gè)合適的值。

注意:每個(gè)打印機(jī)都有一個(gè)緩沖區(qū),緩沖區(qū)的大小視品牌型號(hào)有所不同。打印機(jī)的打印速度有限,如果我們瞬間發(fā)送大量的數(shù)據(jù)給打印機(jī),會(huì)造成打印機(jī)緩沖區(qū)滿。緩沖區(qū)滿后,如繼續(xù)寫入,可能會(huì)出現(xiàn)數(shù)據(jù)丟失,打印亂碼。

這里使用 CocoaAsyncSocket 開(kāi)源框架,與打印機(jī)進(jìn)行 Socket 連接。 CocoaAsyncSocket 中主要包含兩個(gè)類:

這里我們只用到 GCDAsyncSocket ,因此只需要將 GCDAsyncSocket.h 和 GCDAsyncSocket.m 兩個(gè)文件導(dǎo)入項(xiàng)目。

注意:手機(jī)和打印機(jī)必須在同一局域網(wǎng)下,設(shè)置到打印機(jī)的host和port。

連接成功后會(huì)通過(guò)代理回調(diào)

Timeout為負(fù),表示不設(shè)置超時(shí)時(shí)間。這里的data就是 上一篇 中拼接的打印數(shù)據(jù)。

寫入完成后回調(diào)

斷開(kāi)連接有以下幾種方法

連接斷開(kāi)后回調(diào)

讀取到數(shù)據(jù)會(huì)回調(diào)

網(wǎng)口打印機(jī)一般都支持狀態(tài)查詢,查詢指令如下:

可以通過(guò) 上一篇 介紹指令拼接方法,查詢打印機(jī)的狀態(tài)。

本篇只是簡(jiǎn)單介紹了,通過(guò)藍(lán)牙和Socket連接打印機(jī)的方法。雖然可以初步完成連接和打印,但是,在真正的項(xiàng)目中使用還是遠(yuǎn)遠(yuǎn)不夠的。這里還有很多情況需要考慮,比如連接斷開(kāi)、打印機(jī)異常、打印機(jī)緩沖區(qū)滿、打印機(jī)缺紙等。我們可以針對(duì)自身的業(yè)務(wù)情況,進(jìn)行相應(yīng)的處理。

Core Bluetooth Programming Guide

Getting the pixel data from a CGImage object

Core Bluetooth Programming Guide

蘋果手機(jī)打印機(jī)在哪里打印

以iPhone11,iOS13系統(tǒng)為例,蘋果手機(jī)找不到隔空打印機(jī),有可能是不支持“隔空打印”功能或者是沒(méi)有開(kāi)啟無(wú)線打印功能。還有可能是蘋果手機(jī)和打印機(jī)沒(méi)有連接至同一個(gè)Wi-Fi網(wǎng)絡(luò)環(huán)境,這樣就會(huì)導(dǎo)致不能找到隔空打印機(jī)。

一般不支持“隔空打印”功能的蘋果手機(jī)是不能找到隔空打印機(jī)的,而支持“隔空打印”功能,那么只要設(shè)備處于一個(gè)Wi-Fi網(wǎng)絡(luò)環(huán)境,這樣就可以找到隔空打印機(jī)。

蘋果手機(jī)隔空打印的方法如下:

1、首先開(kāi)啟打印機(jī)的無(wú)線打印功能;

2、打開(kāi)手機(jī),在手機(jī)桌面上找到“照片”并點(diǎn)擊打開(kāi);

3、然后選擇一張要打印的照片并點(diǎn)擊它;

4、接著點(diǎn)擊這張照片左下方的分享圖標(biāo),找到打印并點(diǎn)擊它;

5、最后選擇想要的打印機(jī)并點(diǎn)擊打印就可以了。

該答案適用于蘋果大部分手機(jī)型號(hào)。

iOS 如何連接打印機(jī)

iOS 10連接打印機(jī)的方法如下:

首先運(yùn)行相應(yīng)的打印機(jī)程序,如下圖所示:

點(diǎn)開(kāi)對(duì)應(yīng)設(shè)備上的開(kāi)關(guān),如下圖所示:

然后輸入相應(yīng)的管理員的賬號(hào)與密碼,并點(diǎn)擊“OK”如下圖所示:

接下來(lái)在下圖中添加或刪除需要使用的打印機(jī),并點(diǎn)擊“OK”。如下圖所示:

接下來(lái)打開(kāi)iOS系統(tǒng)中的“打印和傳真圖標(biāo)”,并添加需要共享的打印機(jī)。如下圖所示:

同時(shí)按照下圖刪除不需要的打印機(jī),如下圖所示:

然后添加所需打印機(jī),如下圖所示:

檢查打印機(jī)是否添加成功,如果出現(xiàn)下圖則表示打印機(jī)添加成功。如下圖所示:

分享題目:ios開(kāi)發(fā)打印機(jī)功能,ios網(wǎng)絡(luò)打印
網(wǎng)頁(yè)網(wǎng)址:http://www.muchs.cn/article26/phjecg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、靜態(tài)網(wǎng)站、Google、云服務(wù)器、全網(wǎng)營(yíng)銷推廣、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化