日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 蓝牙扫描枪

發布時間:2023/12/20 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 蓝牙扫描枪 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS 藍牙掃描槍

1. 實現原理

通過藍牙連接手機和掃描槍,相當于給手機添加了一個外接鍵盤,當連接掃描槍后,手機內的鍵盤不會彈出來。

可以通過textField的代理可以監聽到掃描過程和掃描結果。

掃描時候相當于外接鍵盤在輸入,通過-(BOOL)textField:(UITextField)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString)string回調可以監聽到。

通過上面的回調我們會發現每次掃描結束后都會自動添加一個換行符,所以最后的掃描結果我們可以通過-(BOOL)textFieldShouldReturn:(UITextField*)textField來監聽到。

2. 功能實現

2.1 業務場景

掃碼槍通過藍牙連接iOS手機設備,將掃描結果傳輸到手機App中進行其他業務處理。

2.2 業務實現

2.2.1 連接掃碼槍

設備打開藍牙,通過藍牙連接掃碼槍。

如何驗證是否連接成功? 連接后,可以打開手的備忘錄等可以輸入文本的工具,點擊輸入,有光標出現。這時候使用藍牙掃描槍掃描一個條形碼,正常情況下,條形碼的的內容會通過藍牙掃描槍傳入到手機設備,并顯示在光標輸入的地方。

2.2.2 接收和處理掃描結果

我們在App內接收掃碼槍的掃描內容,可以通過textField來接收。掃碼槍就是一個外接鍵盤,textField可以接收鍵盤的內容。

初始化一個textField,不需要將其添加到view層,只初始化一個textField對象即可。

實現textField的代理,即可監控掃碼槍內容的輸入。

3. 注意事項

3.1 掃碼槍的斷與連

掃碼槍連接期間 ,鍵盤是不會彈出來。掃描結束后掃碼槍會在幾秒之后自動斷開,這時候鍵盤可能會自動彈出。我們用的設備是掃描結束后會自動關閉,再次掃描時會再打開。
這個根據不同設備和業務自行處理,適合自己的業務即可。

3.2 掃描結果延時處理

掃碼內容是一個字符一個字符的傳輸到手機設備里的。和鍵盤輸入是一樣的,鍵盤也是一個字符一個字符的輸入。這個可以通過-(BOOL)textField:(UITextField)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString)string方法來監聽掃描內容的傳入。

不建議在 -(BOOL)textField:(UITextField)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString)string 方法里來處理掃描結果,因為不清楚什么時候掃描完成。

建議再 -(BOOL)textFieldShouldReturn:(UITextField*)textField 方法里處理掃描結果,因為每次整體內容掃描結束后,掃碼槍會自動添加一個換行符,這個代理會被回調。

如果不是在上面的方法中處理掃描的話,對掃描的內容需要添加延遲處理,否則掃描的結果可能就只是一串內容中的最后一個字符。

之前有遇到這樣的“坑”:初始化了scannerTextField來監聽輸入內容,scannerTextField有一個target方法來監聽掃描內容。

[scannerTextField addTarget:self action:@selector(scannerTextFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]

這個方法只要掃描內容改變就會被調用,我在scannerTextFieldEditingChanged:這個方法中直接處理掃描內容,
結果發現獲取到的掃描內容只是一個字符。

本來要掃描一串字符,結果只得到了其中一個字符,這個是怎么回事?

這是因為掃碼是一個字符一個字符來處理的,scannerTextFieldEditingChanged:這個方法只要是有新值就會回調,只獲取到了一個字符就以為掃描了整個結果,這是不對的。

避免這個問題的辦法有兩個:

一是在scannerTextFieldEditingChanged:這個方法里加一個延遲,延遲處理掃碼結果,但是需要在每次收到結果的時候設置 [NSObject cancelPreviousPerformRequestsWithTarget:self];
,0.5秒的延遲足夠讓掃碼槍將整個掃描結果都獲取到了。

- (void)scannerTextFieldEditingChanged:(UITextField *)sender {[NSObject cancelPreviousPerformRequestsWithTarget:self];if(sender.text.length > 3){[self performSelector:@selector(processScanerBarcode:) withObject:textInput afterDelay:0.5];} }

二是不要再scannerTextFieldEditingChanged:這個方法中監聽掃描結果,在-(BOOL)textFieldShouldReturn:(UITextField*)textField 代理中處理掃描結果。

4. 其他

下面是一些資料和參考,至于對不對沒去考量,可作參考。

[1] 藍牙掃描槍和原生鍵盤:https://stackoverflow.com/questions/46923853/default-keyboard-in-ios-disappears-when-bluetooth-scanner-is-connected
掃描槍上有一個按鈕,長按可以打開原生鍵盤。

[2] 連接掃描儀鍵盤不會顯示 https://stackoverflow.com/questions/38437658/default-keyboard-is-not-coming-when-barcode-scanner-device-is-connected-by-bluet

iPad上,當軟鍵盤消失時,只需按住屏幕右下角的向下箭頭,軟鍵盤就會恢復
[3] 安卓條碼掃描器藍牙設備禁用鍵盤 https://stackoverflow.com/questions/47706642/barcode-scanner-bluetooth-device-disables-the-keyboard

[4] 如何在 Android 上同時啟用硬件和虛擬鍵盤 https://stackoverflow.com/questions/10561760/how-to-enable-both-hardware-and-virtual-keyboards-on-android-ice-cream-sandwich/24287780#24287780

👍🏻

[5] iOS 當連接外接設備時,顯示軟鍵盤 https://stackoverflow.com/questions/4150724/display-soft-keyboard-ipad-when-is-connected-a-bluetooth-input-device

👍🏻

[6] 如何知道iOS設備上是否有外接鍵盤 https://stackoverflow.com/questions/2893267/how-can-i-detect-if-an-external-keyboard-is-present-on-an-ipad

👍🏻

[7] 安卓連接藍牙設備時喚起應用程序 https://stackoverflow.com/questions/44102559/start-application-when-bluetooth-device-is-connected

[8] iOS 藍牙掃描槍和外接鍵盤沖突問題 https://stackoverflow.com/questions/72194810/when-the-ios-device-is-connected-to-the-bluetooth-scanner-the-apple-magic-keybo

總結

以上是生活随笔為你收集整理的iOS 蓝牙扫描枪的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。