otg介面轉換器(或者自帶usb介面的裝置(大頭))
usb掃碼槍(支援usb虛擬串列埠)
安卓裝置
串列埠方式
usb方式
在掃碼槍連線機器的時候,當掃碼槍掃瞄到內容時,獲取掃瞄到的內容。
連線掃碼槍,因為資料肯定是以位元組流的方式傳送的,那麼我們只需獲取到輸入的位元組流,自己處理成需要的內容就可以了。
需要經過以下幾個步驟:
步驟一:整合谷歌原生serial_port包,這個自己看上面教程了。
的類,這個類的作用是尋找咱們安卓裝置上連線的串列埠裝置(包括掃碼槍),具體獲取掃碼槍串列埠位址的思路:獲取未插入掃碼槍時所有裝置的串列埠位址------》獲取插入掃碼槍時所有裝置的串列埠位址
case r.id.btn_print://獲取所有串列埠裝置位址,mfinder就是serialportfinder
stringbuffer stringbuffer = new stringbuffer();
for (string str:mfinder.getalldevicespath())
mtvmessage.settext(stringbuffer.tostring());
break;
怎麼找usb掃碼槍你懂我意思吧。
步驟三:連線裝置:
private string mserialpath = "/dev/ttyusb0" ;//物理串列埠位址,這個就是咱們步驟二找到的位址了,這是我的裝置的位址,你的自己找去
private int baudrate = 9600;//波特率,這個是可以掃碼槍自己設定的,看說明書
private serialport mserialport;
private inputstream minputstream;
@override
protected int getcontentview()
@override
protected void initview()
private void initserialport() catch (exception e)
}
步驟四:獲取資料流,這時候步驟三,我們開啟了乙個執行緒讀取掃碼槍的資料流,這時候我寫了乙個死迴圈,輪詢掃碼槍傳送的內容,執行緒**如下
private inputstream minputstream;
/** * 讀串列埠線程
*/private class readthread extends thread catch (unsupportedencodingexception e)
}});
}thread.sleep(300);//你自己可以設定睡眠時間,這個睡眠時間可以會影響識別速度,那麼就可以叫使用者加錢,你懂我意思吧。
} catch (exception e) }}
}
嗯,到了這一步,大功告成了。
注意:串列埠方式實現的話相容性不好,因為遇到部分安卓裝置直接閹割了這部分功能,所以我才會研究usb方式的。
該種方式好處在於不需要整合serial_port包,但是裡面一些類理解比較靈性,usb方式需要經過以下幾個步驟:
步驟一:尋找需要連線的devices裝置,這裡的話有兩種場景
1.usb掃碼槍一直插在安卓裝置上,我們需要在程式啟動的時候自動找到並且連線
2.usb掃碼槍在熱拔插的情況下,我們需要在插入的時候連線
貼**:
private usbmanager mmanager;
//查詢已連線的裝置
usbdevice finddevices()
hashmapmmap = mmanager.getdevicelist();
for (usbdevice device : mmap.values())
}return null;
}
這是basescanner,這個類名我覺得不夠準確,它是用來記錄需要支援的裝置的資訊的,包含裝置的判斷方法:
public class basescanner
public static boolean iss5920(usbdevice usbdevice)
}
第二種usb掃碼槍熱拔插連線方式,這時候我們採用的是廣播監聽的方式,因為裝置撥叉都會有廣播傳送,這條廣播包含的資訊包含乙個usbdevices物件(也就是掃碼槍),我們需要動態註冊拔,插兩條廣播,靜態註冊不生效,**如下:
//這是廣播類,因為我的掃瞄是寫在乙個service中,所以把連線的裝置交給service處理就可以
public class usbbroadcastreceiver extends broadcastreceiver
}else if(usbmanager.action_usb_device_attached.equals(action))}}
我是在程式啟動的時候就註冊了這個廣播如下:
private usbbroadcastreceiver musbreceiver;
@override
public void oncreate()
@override
public void onterminate()
private void registbroadcast()}
步驟二,連線裝置,這邊我把所有都寫注釋裡面:
private usbdevice mdevide;
private usbdeviceconnection mconnect;
private static final string action_usb_permission = "com.android.example.usb_permission";
private static usbconnectmanager minstance;
private scannerlistener mlistener;
private usbmanager mmanager;
private usbendpoint musbendpointin;
private usbinte***ce musbinte***ce;
private thread mreadingthread;
public void connetdevice(usbdevice device, context context)
mconnect = mmanager.opendevice(mdevide);//開啟裝置
musbinte***ce = device.getinte***ce(0);//獲取資料的介面.這個可以理解成裝置有多少個線頭子
musbendpointin = musbinte***ce.getendpoint(0);//獲取裝置的輸出流向,輸入或者輸出因為usb掃碼槍只有乙個輸出項,所以直接選擇0
if (mconnect.claiminte***ce(musbinte***ce, true)) else
} catch (exception e)
}
步驟三,獲取輸入的流,並解析成需要的內容,**如下:
//開執行緒讀取資料
private void startreading()
mreadingthread = new thread(new runnable()
} catch (unsupportedencodingexception e) }}
}}});mreadingthread.start();
}
ok啦,usb模式的也完成了。
有疑問或者有建議的膀友可以**:497438697 我是群裡的 杭州-大魔王,有艾特必應。
祝大家新年快樂,萬事亨通!!!
USB掃碼槍獲取資料流的實現方式
otg介面轉換器 或者自帶usb介面的裝置 大頭 usb掃碼槍 支援usb虛擬串列埠 安卓裝置 串列埠方式 usb方式 在掃碼槍連線機器的時候,當掃碼槍掃瞄到內容時,獲取掃瞄到的內容。連線掃碼槍,因為資料肯定是以位元組流的方式傳送的,那麼我們只需獲取到輸入的位元組流,自己處理成需要的內容就可以了。需...
js 條碼槍掃瞄 js獲取USB掃碼槍資料
前言找了很多相關的教程不太好用,汲取各家之長總結精簡了一下 原理掃碼槍掃瞄到的條形碼每一位會觸發一次onkeydown事件 比如掃瞄條碼位 1234567890 的條形碼,會連續執行10次onkeydown事件 條碼掃瞄到最後一位,會直接觸發enter 支援vue data else if e.wh...
js讀取usb掃碼槍資料
條碼掃瞄器其實就是一種輸入裝置,跟鍵盤一樣。在控制台列印掃瞄過程,可以看出,掃瞄過程就像是在鍵盤上敲擊相應的鍵,keycode和鍵盤是一一對應的,只是輸入速度 間隔時間 比物理鍵盤輸入要快得多。我們可以通過監聽輸入間隔時間,來判斷到底是鍵盤輸入還是掃瞄輸入。掃碼槍輸入的時間間隔一般在10毫秒以內,物...