RFID開發
- 前言
- 開發步驟
- 第一步:匯入libs,如圖:
- 第二步:RFID功能初始化及撰寫
- 結語及注意點
前言
在專案前期的時候就一直提出要做RFID自動識別標簽解放雙手的想法,直到最近專案用戶量上升,促使這個想法開始逐步實作,所以就有了本篇博客,記錄一下開發步驟,避免以后維護迭代的時候忘記了一些關鍵步驟,下面進入正題,不管做什么硬體設備的集成,首先要做的就是查看相關的說明檔案和操作手冊,接著就是看人家Demo的運行效果結合自己專案的需求做思考,
開發步驟
第一步:匯入libs,如圖:

接著將jniLibs匯入,由于專案各種jar檔案和so檔案的沖突問題,我將jniLibs中的so檔案放在了libs下面

[如果你跟我一樣將jniLibs中的檔案放在了libs的話,要做的就是在build.gradle檔案的android下添加如下代碼:
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
]
將這些檔案添加完之后不要急著去點擊Make Project【小錘子】,要先在build.gradle檔案中添加如下代碼:
implementation files('libs/xUtils-2.5.5.jar')
implementation files('libs/jxl.jar')
implementation files('libs/cw-deviceapi20190815.jar')
這個時候就可以Make Project【構建專案了】
第二步:RFID功能初始化及撰寫
private void initUHF() {
try {
mReader = RFIDWithUHF.getInstance();
} catch (Exception e) {
showToast(e.getMessage());
}
if (mReader != null) {
//這里用了一個異步執行緒去初始化,如果不開啟執行緒的話就會直接崩潰😂
new InitTask().execute();
}
}
//初始化的異步任務
@Override
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
return mReader.init();
}
//自動識別標簽
private void readTag() {
// 識別標簽
if (btnStart.getText().toString().equals("開始識別")) {
// 單標簽回圈
if (mReader.startInventoryTag(0, 0)) {
btnStart.setText("停止識別");
loopFlag = true;
new TagThread().start();
} else {
mReader.stopInventory();
showToast("開啟失敗----");
}
} else {
// 停止識別
stopInventory();
}
}
//手動識別標簽
private void readTag() {
// 單步
String strUII = mReader.inventorySingleTag();
if (!TextUtils.isEmpty(strUII)) {
String strEPC = mReader.convertUiiToEPC(strUII);
addEPCToList(strEPC, "N/A");
tvCount.setText("" + adapter.getItemCount());
} else {
showToast("失敗哦!");
}
}
自動識別的時候開了一個異步任務實時資料更新,如下:
class TagThread extends Thread {
@Override
public void run() {
String strTid;
String strResult;
String[] res;
while (loopFlag) {
res = mReader.readTagFromBuffer();
if (res != null) {
strTid = res[0];
if (strTid.length() != 0 && !strTid.equals("0000000000000000") && !strTid.equals("000000000000000000000000")) {
strResult = "TID:" + strTid + "\n";
} else {
strResult = "";
}
Log.i("data", "EPC:" + res[1] + "|" + strResult);
Message msg = handler.obtainMessage();
msg.obj = strResult + "EPC:" + mReader.convertUiiToEPC(res[1]) + "@" + res[2];
handler.sendMessage(msg);
}
}
}
}
在handeler中將資料添加的List集合中并展示在串列中:
private void addEPCToList(String epc, String rssi) {
if (!TextUtils.isEmpty(epc)) {
int index = checkIsExist(epc);
TestBean testBean = new TestBean();
testBean.setTagCount(String.valueOf(1));
testBean.setTagRssi(rssi);
testBean.setTagUii(epc);
if (index == -1) {
tagList.add(testBean);
recyclerView.setAdapter(adapter);
tvCount.setText("" + adapter.getItemCount());
} else {
int tagcount = Integer.parseInt(tagList.get(index).getTagCount(), 10) + 1;
testBean.setTagCount(String.valueOf(tagcount));
tagList.set(index, testBean);
}
adapter.notifyDataSetChanged();
}
}
到這里就完成了RFID的掃描讀取功能,如圖:

結語及注意點
1、使用前請確認您的機器已安裝此模塊,
2、要正常使用模塊需要在\libs\armeabi\目錄放置libDeviceAPI.so檔案,同時在\libs\目錄下放置DeviceAPIver20160728.jar檔案,
3、在操作設備前需要呼叫 init()打開設備,使用完后呼叫 free() 關閉設備
RFID相關介紹文章可查看:物聯網之RFID一
相關的Demo關注公眾號“只會寫bug的咸魚”中,后臺回復“RFID功能”獲取
創作不易,不惜勿噴!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/60505.html
標籤:其他
