package com.example.writeepc; import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.widget.Button; import androidx.databinding.DataBindingUtil; import com.example.writeepc.adapter.MyMesInfoAdapter; import com.example.writeepc.base.BaseActivity; import com.example.writeepc.base.okgo.MyRecultCall; import com.example.writeepc.base.okgo.MyResult; import com.example.writeepc.been.MESInfo; import com.example.writeepc.databinding.ActivityShuangqian2Binding; import com.example.writeepc.utils.SharedPreferencesUtils; import com.google.gson.reflect.TypeToken; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.model.Response; import com.lzy.okgo.request.base.Request; import com.uhf.api.cls.Reader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; public class ShuangqianActivity2 extends BaseActivity { private ActivityShuangqian2Binding binding; private MyMesInfoAdapter adapter; private Button traceSanButton; private boolean sanState = true; private Handler handler = new Handler(); private Runnable runnable; private MyKeyReceiver keyReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_shuangqian2); initUHFRManager1(); // 设置功率 String powerTrace1 = SharedPreferencesUtils.getstring("powerTrace", "22"); int powerTrace = Integer.parseInt(powerTrace1); Reader.READER_ERR readerErr = uhfrManager.setPower(powerTrace, powerTrace); Log.e("TAG", "追溯设置功率" + powerTrace1 + ":" + readerErr.name()); initDialog(); adapter = new MyMesInfoAdapter(this); binding.setAdapter(adapter); traceSanButton = binding.traceSanButton; runnable = new Runnable() { @Override public void run() { if (sanState) { handler.removeCallbacks(runnable); } else { readEPC(12); handler.postDelayed(runnable, 1000); } } }; keyReceiver = new MyKeyReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.rfid.FUN_KEY"); registerReceiver(keyReceiver, intentFilter); String ACTION_CLOSE_SCAN = "com.rfid.CLOSE_SCAN"; Intent toKillService = new Intent(); toKillService.setAction(ACTION_CLOSE_SCAN); sendBroadcast(toKillService); } public void dataReadRFID(View view) { if (sanState) { handler.postDelayed(runnable, 0); sanState = false; traceSanButton.setBackgroundResource(R.drawable.button_bg2); traceSanButton.setText("停止扫描"); } else { sanState = true; handler.removeCallbacks(runnable); traceSanButton.setBackgroundResource(R.drawable.button_bg1); traceSanButton.setText("开始扫描"); } // String msg="37f82ad8-6a16-4b9b-880c-78ebf644970a0224084188831000000000000008043511320452025-08-04T00:00:002025-08-04T10:55:31.5171L403张磊HL49691000YC250804L403204511P24084188832025-08-04T10:55:31.5170100S2045-0500"; // jiexi(msg); } @Override protected void readTidReault(boolean readState, String result, byte[] rdata) { super.readTidReault(readState, result, rdata); binding.dataEpc.setText(result); if (readState) { dataReadRFID(null); // callWebService(buildSelectRequest(result)); haohuaMesSelect(result); } } private void haohuaMesSelect(String result) { OkGo.post("http://192.168.26.26:5050/UMInterface/RFID/tyreTracingBack") .params("rfid", result) .execute(new MyRecultCall(dialog, this) { @SuppressLint("NotifyDataSetChanged") @Override public void onSuccess(Response response) { super.onSuccess(response); MyResult body = response.body(); try { if (body.getCode() == 200) { List list = gson.fromJson(body.getDataJson(), new TypeToken>() { }.getType()); if (list.isEmpty()) { tipsDialog.setTip(false, "未返回信息"); tipsDialog.show(); return; } List mesInfos = new ArrayList<>(list.size()); list.forEach(item -> { String[] split = item.split(":"); MESInfo mesInfo = new MESInfo(); mesInfo.setTitle(split[0]); mesInfo.setInfo(split[1]); mesInfos.add(mesInfo); }); adapter.setList(mesInfos); } else { tipsDialog.setTip(false, body.getInfo()); tipsDialog.show(); adapter.setList(null); } } catch (Exception e) { tipsDialog.setTip(false, "接口返回信息异常,解析失败"); tipsDialog.show(); } adapter.notifyDataSetChanged(); } }); } private void callWebService(String soapRequest) { // 发送 POST 请求 OkGo.post("http://10.135.55.206:99/WebService.asmx") .headers("Content-Type", "text/xml; charset=utf-8") .upString(soapRequest, mediaType) .execute(new StringCallback() { @Override public void onStart(Request request) { super.onStart(request); dialog.show(); } @Override public void onSuccess(Response response) { // 处理响应结果 String result = response.body(); try { String str = ""; int faultstringIndex = result.indexOf(str); if (faultstringIndex > -1) { String faultstring = result.substring(faultstringIndex + str.length(), result.indexOf("")); tipsDialog.setTip(false, faultstring); tipsDialog.show(); return; } int codeIndex = result.indexOf(""); if (codeIndex > -1) { String resultCode = result.substring(codeIndex + 6, result.indexOf("")); if (resultCode.equals("200")) { String resultMsg = result.substring(result.indexOf("") + 8, result.indexOf("")); jiexi(resultMsg); return; } String resultMsg = result.substring(result.indexOf("") + 5, result.indexOf("")); tipsDialog.setTip(false, resultMsg); tipsDialog.show(); } } catch (Exception e) { tipsDialog.setTip(false, "接口返回信息异常"); tipsDialog.show(); } } @Override public void onFinish() { super.onFinish(); dialog.dismiss(); } }); } // 创建验证信息 private String buildSelectRequest(String epcid) { StringBuilder soapRequest = new StringBuilder(); soapRequest.append(""); soapRequest.append(""); soapRequest.append(""); soapRequest.append(""); soapRequest.append("").append(epcid).append(""); soapRequest.append(""); soapRequest.append(""); soapRequest.append(""); return soapRequest.toString(); } private void jiexi(String msg) { StringBuilder stringBuilder = new StringBuilder(); try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(new StringReader(msg)); String currentTag = null; int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: currentTag = parser.getName(); break; case XmlPullParser.TEXT: if (currentTag != null && parser.getText() != null) { String text = parser.getText().trim(); // 解析字段值 switch (currentTag) { case "BARCODE": stringBuilder.append("条 码:").append(text).append("\n"); break; case "BUITNBR": stringBuilder.append("ERP编码:").append(text).append("\n"); break; case "BUITDSC": stringBuilder.append("规格名称:").append(text).append("\n"); break; case "BUDAT": stringBuilder.append("成型日期:").append(text).append("\n"); break; case "BUTIM": stringBuilder.append("成型时间:").append(text).append("\n"); break; case "BUSHT": stringBuilder.append("成型班次:").append(text).append("\n"); break; case "BUMCH": stringBuilder.append("成型机台:").append(text).append("\n"); break; case "BUNAM": stringBuilder.append("成 型 工:").append(text).append("\n"); break; case "BUNAMCOD": stringBuilder.append("成型工账号:").append(text).append("\n"); break; case "BUPLANCOD": stringBuilder.append("成型计划号:").append(text).append("\n"); break; case "TYRENO": stringBuilder.append("生 胎 码:").append(text).append("\n"); break; } } break; case XmlPullParser.END_TAG: currentTag = null; break; } eventType = parser.next(); } binding.dataInfo.setText(stringBuilder.toString()); } catch (XmlPullParserException | IOException e) { Log.e("TAG", "解析XML失败: " + e.getMessage()); e.printStackTrace(); } } private class MyKeyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { var keydown = intent.getBooleanExtra("keydown", false); if (!keydown) { dataReadRFID(null); } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(keyReceiver); } }