后台拼接字符

master
wanghao 1 week ago
parent 073acc35c2
commit 079422842c

@ -10,8 +10,8 @@ android {
applicationId "com.example.xiebiaoqian" applicationId "com.example.xiebiaoqian"
minSdkVersion 22 minSdkVersion 22
targetSdkVersion 29 targetSdkVersion 29
versionCode 1 versionCode 4
versionName "1.0" versionName "1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

@ -10,8 +10,8 @@
{ {
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"versionCode": 1, "versionCode": 4,
"versionName": "1.0", "versionName": "1.3",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
] ]

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xiebiaoqian"> package="com.example.xiebiaoqian">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<application <application
android:name=".base.Myapp" android:name=".base.Myapp"
android:allowBackup="true" android:allowBackup="true"
@ -13,13 +15,17 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.XieBiaoQian"> android:theme="@style/Theme.XieBiaoQian">
<activity android:name=".MainActivity"> <activity android:name=".base.BaseActivity"/>
<activity android:name=".MainActivity2">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".MainActivity">
</activity>
</application> </application>
</manifest> </manifest>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<litepal> <litepal>
<dbname value="write_tag_info" /> <dbname value="write_tag_info" />
<version value="1" /> <version value="2" />
<list> <list>
<mapping class="com.example.xiebiaoqian.entity.WriteInfo"></mapping> <mapping class="com.example.xiebiaoqian.entity.WriteInfo"></mapping>
</list> </list>

@ -171,6 +171,7 @@ public class MainActivity extends AppCompatActivity implements IAsynchronousMess
epcASCII = asciiData.toUpperCase(); epcASCII = asciiData.toUpperCase();
Log.e("TAG", "写入的数据为:" + asciiData + ",长度为" + asciiData.length()); Log.e("TAG", "写入的数据为:" + asciiData + ",长度为" + asciiData.length());
int writeResult = UHFReader._Tag6C.WriteEPC_MatchTID(1, asciiData, targetTid, 0); int writeResult = UHFReader._Tag6C.WriteEPC_MatchTID(1, asciiData, targetTid, 0);
sanEpcCode.setText(null);
Toast.makeText(this, writeResult == 0 ? "写入成功,点击下方扫描进行验证" : "写入失败", Toast.LENGTH_SHORT).show(); Toast.makeText(this, writeResult == 0 ? "写入成功,点击下方扫描进行验证" : "写入失败", Toast.LENGTH_SHORT).show();
break; break;
case R.id.button_san_epc: case R.id.button_san_epc:
@ -190,11 +191,12 @@ public class MainActivity extends AppCompatActivity implements IAsynchronousMess
writeInfo.setText(null); writeInfo.setText(null);
break; break;
case R.id.button_info_seva: 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 writeInfo = new WriteInfo();
writeInfo.setTid(targetTid); writeInfo.setTid(targetTid);
writeInfo.setEpc(epc); writeInfo.setEpc(epc);
writeInfo.setEpcASCII(epcASCII); writeInfo.setEpcASCII(epcASCII);
writeInfo.setReadEpc(sanEpcCode.getText().toString());
writeInfo.setDateTime(sdf.format(new Date())); writeInfo.setDateTime(sdf.format(new Date()));
writeInfo.save(); writeInfo.save();
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
@ -230,7 +232,7 @@ public class MainActivity extends AppCompatActivity implements IAsynchronousMess
super.onResume(); super.onResume();
UHFReader._Config.OpenConnect(false, this); UHFReader._Config.OpenConnect(false, this);
UHFReader._Config.SetANTPowerParam(2, 24); UHFReader._Config.SetANTPowerParam(2, 10);
} }
//关闭驱动 //关闭驱动

@ -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);
}
}

@ -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(); // 发生异常时释放
}
}
}

@ -7,8 +7,17 @@ public class WriteInfo extends LitePalSupport {
private String tid; private String tid;
private String epc; private String epc;
private String epcASCII; private String epcASCII;
private String readEpc;
private String dateTime; private String dateTime;
public String getReadEpc() {
return readEpc;
}
public void setReadEpc(String readEpc) {
this.readEpc = readEpc;
}
public int getId() { public int getId() {
return id; return id;
} }

@ -54,10 +54,11 @@ public class JxlExporter {
sheet.setColumnView(2, 15); sheet.setColumnView(2, 15);
// 第3列EPC_ASCII宽度15 // 第3列EPC_ASCII宽度15
sheet.setColumnView(3, 20); sheet.setColumnView(3, 20);
// 第4列采集时间宽度20
sheet.setColumnView(4, 20); sheet.setColumnView(4, 20);
// 第4列采集时间宽度20
sheet.setColumnView(5, 20);
// 4. 写入表头(第一行) // 4. 写入表头(第一行)
String[] headers = {"序号", "TID", "EPC", "ASCII", "保存时间"}; String[] headers = {"序号", "TID", "写入EPC", "ASCII","读取EPC", "保存时间"};
for (int i = 0; i < headers.length; i++) { for (int i = 0; i < headers.length; i++) {
// Label(列索引, 行索引, 内容) // Label(列索引, 行索引, 内容)
Label headerLabel = new Label(i, 0, headers[i]); 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())); sheet.addCell(new Label(2, rowIndex, data.getEpc() == null ? "" : data.getEpc()));
// EPC_ASCII // EPC_ASCII
sheet.addCell(new Label(3, rowIndex, data.getEpcASCII() == null ? "" : data.getEpcASCII())); 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. 写入文件并关闭工作簿 // 6. 写入文件并关闭工作簿

@ -30,30 +30,30 @@
</FrameLayout> </FrameLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="8dp"
android:layout_marginRight="5dp"
android:orientation="horizontal">
<TextView
android:id="@+id/san_redly_tag"
style="@style/text_info_style"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="45dp" android:layout_height="match_parent"
android:layout_marginLeft="5dp" android:background="@color/white"
android:layout_marginTop="8dp" android:hint="读取目标标签"
android:layout_marginRight="5dp" android:singleLine="true" />
android:orientation="horizontal">
<Button
<TextView android:id="@+id/button_san_tag"
android:id="@+id/san_redly_tag" style="@style/button_submit"
style="@style/text_info_style" android:layout_width="wrap_content"
android:layout_width="match_parent" android:layout_height="match_parent"
android:layout_height="match_parent" android:text="读取" />
android:background="@color/white" </LinearLayout>
android:hint="读取目标标签"
android:singleLine="true" />
<Button
android:id="@+id/button_san_tag"
style="@style/button_submit"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="读取" />
</LinearLayout>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity2">
<TextView
style="@style/title_style"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text="标签写入" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="8dp"
android:layout_marginRight="5dp"
android:orientation="horizontal">
<TextView
android:id="@+id/san_redly_tag"
style="@style/text_info_style"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:hint="读取目标标签"
android:singleLine="true" />
<Button
android:id="@+id/button_san_tag"
style="@style/button_submit"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="读取" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="18dp"
android:layout_marginRight="5dp"
android:orientation="horizontal">
<TextView
style="@style/text_title_style"
android:layout_width="90dp"
android:layout_height="match_parent"
android:text="输入编号:" />
<EditText
android:id="@+id/editTextNumber"
style="@style/text_info_style"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:hint="输入4位数字"
android:inputType="number"
android:maxLength="4"
/>
</LinearLayout>
<Button
android:id="@+id/button_epc_write"
style="@style/button_submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="写入" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginTop="18dp"
android:text="验证信息"
android:textColor="@color/blue" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:orientation="horizontal">
<TextView
android:id="@+id/san_epc_code"
style="@style/text_info_style"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white" />
</LinearLayout>
<Button
android:id="@+id/button_epc_san"
style="@style/button_submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="扫描" />
<Button
android:id="@+id/button_clera_view"
style="@style/button_submit_yellow"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_margin="20dp"
android:text="清空" />
</LinearLayout>

@ -12,24 +12,23 @@
<item>全钢胎侧台车-QTC</item> <item>全钢胎侧台车-QTC</item>
<item>全钢胎体台车-QTT</item> <item>全钢胎体台车-QTT</item>
<item>全钢垫胶台车-QDJ</item> <item>全钢垫胶台车-QDJ</item>
<item>全钢裸圈槽车-QGS</item> <item>全钢裸圈槽车-QGSQ</item>
<item>全钢胎圈台车-QTQ</item> <item>全钢胎圈台车-QTQ</item>
<item>全钢带束层台车-QDS</item> <item>全钢带束层台车-QDSC</item>
<item>全钢子口包布-QZK</item> <item>全钢子口包布-QZKBB</item>
<item>全钢钢丝冠带工字轮-QGS</item> <item>全钢钢丝冠带工字轮-QGSGD</item>
</string-array> </string-array>
<string-array name="list1"> <string-array name="list1">
<item>半钢胎面台车-BTM</item> <item>半钢胎面台车-BTM</item>
<item>半钢胎侧台车-BTC</item> <item>半钢胎侧台车-BTC</item>
<item>半钢内衬台车-BNC</item> <item>半钢内衬台车-BNC</item>
<item>半钢带束层台车-BDS</item> <item>半钢带束层台车-BDSC</item>
<item>半钢胎体台车-BTT</item> <item>半钢胎体台车-BTT</item>
<item>半钢钢丝圈挂车-BGS</item> <item>半钢钢丝圈挂车-BGSQX</item>
<item>半钢钢丝圈挂车-BGS</item> <item>半钢钢丝圈挂车-BGSQD</item>
<item>半钢胎圈挂车-BTQ</item> <item>半钢胎圈挂车-BTQ</item>
<item>半钢Vim胎圈小车-BTQ</item> <item>半钢Vim胎圈小车-BTQC</item>
<item>半钢子口包布-预留</item>
</string-array> </string-array>
<string-array name="list2"> <string-array name="list2">

Loading…
Cancel
Save