diff --git a/app/build.gradle b/app/build.gradle index 0d78ab1..84ef72d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.example.xiebiaoqian" minSdkVersion 22 targetSdkVersion 29 - versionCode 1 - versionName "1.0" + versionCode 4 + versionName "1.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index e64a71f..5d3b9f6 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -10,8 +10,8 @@ { "type": "SINGLE", "filters": [], - "versionCode": 1, - "versionName": "1.0", + "versionCode": 4, + "versionName": "1.3", "outputFile": "app-release.apk" } ] diff --git a/app/release/昊华越南-科陆7202kPDA写标签程序v2025111801.apk b/app/release/昊华越南-科陆7202kPDA写标签程序v2025111801.apk deleted file mode 100644 index a66cf4a..0000000 Binary files a/app/release/昊华越南-科陆7202kPDA写标签程序v2025111801.apk and /dev/null differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6669b8d..dc77b6d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,10 +1,12 @@ + + - + + + + + \ No newline at end of file diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml index dc8a4b4..72b99cf 100644 --- a/app/src/main/assets/litepal.xml +++ b/app/src/main/assets/litepal.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/java/com/example/xiebiaoqian/MainActivity.java b/app/src/main/java/com/example/xiebiaoqian/MainActivity.java index b87a18c..3ad347f 100644 --- a/app/src/main/java/com/example/xiebiaoqian/MainActivity.java +++ b/app/src/main/java/com/example/xiebiaoqian/MainActivity.java @@ -171,6 +171,7 @@ public class MainActivity extends AppCompatActivity implements IAsynchronousMess epcASCII = asciiData.toUpperCase(); Log.e("TAG", "写入的数据为:" + asciiData + ",长度为" + asciiData.length()); int writeResult = UHFReader._Tag6C.WriteEPC_MatchTID(1, asciiData, targetTid, 0); + sanEpcCode.setText(null); Toast.makeText(this, writeResult == 0 ? "写入成功,点击下方扫描进行验证" : "写入失败", Toast.LENGTH_SHORT).show(); break; case R.id.button_san_epc: @@ -190,11 +191,12 @@ public class MainActivity extends AppCompatActivity implements IAsynchronousMess writeInfo.setText(null); break; case R.id.button_info_seva: - if (targetTid.isEmpty() || epc.isEmpty() || epcASCII.isEmpty()) return; + if (targetTid==null||targetTid.isEmpty() ) return; WriteInfo writeInfo = new WriteInfo(); writeInfo.setTid(targetTid); writeInfo.setEpc(epc); writeInfo.setEpcASCII(epcASCII); + writeInfo.setReadEpc(sanEpcCode.getText().toString()); writeInfo.setDateTime(sdf.format(new Date())); writeInfo.save(); Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); @@ -230,7 +232,7 @@ public class MainActivity extends AppCompatActivity implements IAsynchronousMess super.onResume(); UHFReader._Config.OpenConnect(false, this); - UHFReader._Config.SetANTPowerParam(2, 24); + UHFReader._Config.SetANTPowerParam(2, 10); } //关闭驱动 diff --git a/app/src/main/java/com/example/xiebiaoqian/MainActivity2.java b/app/src/main/java/com/example/xiebiaoqian/MainActivity2.java new file mode 100644 index 0000000..6811a50 --- /dev/null +++ b/app/src/main/java/com/example/xiebiaoqian/MainActivity2.java @@ -0,0 +1,136 @@ +package com.example.xiebiaoqian; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.example.xiebiaoqian.base.BaseActivity; +import com.example.xiebiaoqian.utils.ASCIIUtil; +import com.pda.rfid.EPCModel; +import com.pda.rfid.IAsynchronousMessage; +import com.pda.rfid.uhf.UHFReader; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class MainActivity2 extends BaseActivity implements IAsynchronousMessage{ + + @BindView(R.id.san_redly_tag) + TextView sanRedlyTag; + @BindView(R.id.editTextNumber) + EditText editTextNumber; + @BindView(R.id.san_epc_code) + TextView sanEpcCode; + private long exitTime;//退出记时 + private boolean readType; + private String targetTid = null; + @SuppressLint("HandlerLeak") + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + playSound(); + if (readType) {//扫描到要写入的标签 + EPCModel epcModel = (EPCModel) msg.obj; + targetTid = epcModel._TID; + sanRedlyTag.setText(targetTid); + Log.e("TAG", "TID读取成功" + targetTid); + } else { + EPCModel epcModel = (EPCModel) msg.obj; + String newCode = ASCIIUtil.hex2Str(epcModel._EPC); + Log.e("TAG", "EPC读取成功" + epcModel._EPC); + sanEpcCode.setText(newCode); + } + + + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main2); + ButterKnife.bind(this); + } + + @OnClick({R.id.button_san_tag, R.id.button_epc_write, R.id.button_epc_san, R.id.button_clera_view}) + public void onClick(View view) { + switch (view.getId()) { + case R.id.button_san_tag: + readType = true; + UHFReader._Tag6C.GetEPC_TID(1, 1); + break; + case R.id.button_epc_write: + String tag = editTextNumber.getText().toString(); + if (tag.isEmpty()) return; + if (tag.length() != 4) { + Toast.makeText(this, "输入长度限制位4位", Toast.LENGTH_SHORT).show(); + } + String asciiData = "2020202020202054" + ASCIIUtil.str2Hex(tag); + int writeResult = UHFReader._Tag6C.WriteEPC_MatchTID(1, asciiData, targetTid, 0); + Toast.makeText(this, writeResult == 0 ? "写入成功,点击下方扫描进行验证" : "写入失败", Toast.LENGTH_SHORT).show(); + break; + case R.id.button_clera_view: + editTextNumber.setText(null); + sanRedlyTag.setText(null); + sanEpcCode.setText(null); + break; + case R.id.button_epc_san: + readType = false; + UHFReader._Tag6C.GetEPC_TID(1, 1); + break; + } + } + + //初始化驱动 + @Override + protected void onResume() { + super.onResume(); + UHFReader._Config.OpenConnect(false, this); + UHFReader._Config.SetANTPowerParam(2, 10); + } + + //关闭驱动 + @Override + protected void onDestroy() { + super.onDestroy(); + UHFReader._Config.Stop(); + UHFReader._Config.CloseConnect(); + handler = null; + } + + //读取到标签 + @Override + public void OutPutEPC(EPCModel epcModel) { + UHFReader._Config.Stop(); + Message msg = new Message(); + msg.obj = epcModel; + handler.sendMessage(msg); + } + + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == 4) { + + if ((System.currentTimeMillis() - exitTime) > 2000) { + //弹出提示,可以有多种方式 + Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + exitTime = System.currentTimeMillis(); + return true; + } else { + finish(); + } + } + return super.onKeyDown(keyCode, event); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/xiebiaoqian/base/BaseActivity.java b/app/src/main/java/com/example/xiebiaoqian/base/BaseActivity.java new file mode 100644 index 0000000..8ee5724 --- /dev/null +++ b/app/src/main/java/com/example/xiebiaoqian/base/BaseActivity.java @@ -0,0 +1,44 @@ +package com.example.xiebiaoqian.base; + +import android.content.res.AssetFileDescriptor; +import android.media.MediaPlayer; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.xiebiaoqian.R; + +public class BaseActivity extends AppCompatActivity { + + + //播放声音 + public void playSound() { + // 每次播放创建新的MediaPlayer + MediaPlayer mediaPlayer = new MediaPlayer(); + try { + // 设置数据源(示例:raw目录下的sound.mp3) + AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.msg); + mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); + afd.close(); + + // 准备(同步准备适合短音效,异步准备需监听OnPreparedListener) + mediaPlayer.prepare(); + + // 设置播放完成监听,释放资源 + mediaPlayer.setOnCompletionListener(mp -> { + mp.release(); // 播放完成后释放 + }); + + // 设置错误监听,避免异常崩溃 + mediaPlayer.setOnErrorListener((mp, what, extra) -> { + mp.release(); + return true; + }); + + // 开始播放 + mediaPlayer.start(); + } catch (Exception e) { + e.printStackTrace(); + mediaPlayer.release(); // 发生异常时释放 + } + } +} diff --git a/app/src/main/java/com/example/xiebiaoqian/entity/WriteInfo.java b/app/src/main/java/com/example/xiebiaoqian/entity/WriteInfo.java index 94f075f..0d26d8c 100644 --- a/app/src/main/java/com/example/xiebiaoqian/entity/WriteInfo.java +++ b/app/src/main/java/com/example/xiebiaoqian/entity/WriteInfo.java @@ -7,8 +7,17 @@ public class WriteInfo extends LitePalSupport { private String tid; private String epc; private String epcASCII; + private String readEpc; private String dateTime; + public String getReadEpc() { + return readEpc; + } + + public void setReadEpc(String readEpc) { + this.readEpc = readEpc; + } + public int getId() { return id; } diff --git a/app/src/main/java/com/example/xiebiaoqian/utils/JxlExporter.java b/app/src/main/java/com/example/xiebiaoqian/utils/JxlExporter.java index 7112b67..7da271b 100644 --- a/app/src/main/java/com/example/xiebiaoqian/utils/JxlExporter.java +++ b/app/src/main/java/com/example/xiebiaoqian/utils/JxlExporter.java @@ -54,10 +54,11 @@ public class JxlExporter { sheet.setColumnView(2, 15); // 第3列(EPC_ASCII):宽度15 sheet.setColumnView(3, 20); - // 第4列(采集时间):宽度20 sheet.setColumnView(4, 20); + // 第4列(采集时间):宽度20 + sheet.setColumnView(5, 20); // 4. 写入表头(第一行) - String[] headers = {"序号", "TID", "EPC", "ASCII", "保存时间"}; + String[] headers = {"序号", "TID", "写入EPC", "ASCII","读取EPC", "保存时间"}; for (int i = 0; i < headers.length; i++) { // Label(列索引, 行索引, 内容) Label headerLabel = new Label(i, 0, headers[i]); @@ -77,8 +78,9 @@ public class JxlExporter { sheet.addCell(new Label(2, rowIndex, data.getEpc() == null ? "" : data.getEpc())); // EPC_ASCII sheet.addCell(new Label(3, rowIndex, data.getEpcASCII() == null ? "" : data.getEpcASCII())); + sheet.addCell(new Label(4, rowIndex, data.getReadEpc() == null ? "" : data.getReadEpc())); // 采集时间 - sheet.addCell(new Label(4, rowIndex, data.getDateTime() == null ? "" : data.getDateTime())); + sheet.addCell(new Label(5, rowIndex, data.getDateTime() == null ? "" : data.getDateTime())); } // 6. 写入文件并关闭工作簿 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2e884ea..80c073d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,30 +30,30 @@ + + + + android:layout_height="match_parent" + android:background="@color/white" + android:hint="读取目标标签" + android:singleLine="true" /> - - - -