package com.example.tyre; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.graphics.Color; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.android.hdhe.uhf.reader.UhfReader; import com.android.hdhe.uhf.readerInterface.TagModel; import com.example.tyre.entity.BaseTyre; import com.example.tyre.entity.EPC; import com.example.tyre.entity.Tyre; import com.example.tyre.util.CommonDialog; import com.example.tyre.util.MyUrl; import com.example.tyre.util.PlayMusic; import com.example.tyre.util.Util; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.model.Response; //import com.seuic.scanner.ScannerKey; //import com.seuic.uhf.EPC; //import com.seuic.uhf.UHFService; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; import androidx.appcompat.app.AppCompatActivity; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import cn.pda.serialport.Tools; /** * Created by 杨万里 on 2019/12/3. */ public class TyreSearchActivity extends AppCompatActivity implements View.OnClickListener{ @BindView(R.id.in_santext) TextView inSantext; @BindView(R.id.basemessage) Button basemessage; @BindView(R.id.button) Button button; @BindView(R.id.pinpai) TextView pinpai; @BindView(R.id.xinghao) TextView xinghao; @BindView(R.id.cengji) TextView cengji; @BindView(R.id.huawen) TextView huawen; private int power = 0;//rate of work private int area = 0; private SharedPreferences shared; private TextView textVersion; private Button buttonStart; private Button buttonBack; private boolean runFlag = true; private boolean startFlag = false; private UhfReader manager; // UHF manager,UHF Operating handle private ArrayList listEPC; private ArrayList listepc = new ArrayList(); private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tyresearch); manager = MyApplication.getManager(); initView(); //start inventory thread Thread thread = new InventoryThread(); thread.start(); // init sound pool com.example.tyre.util.Util.initSoundPool(this); Log.e("onCreate", "onCreate:+ " ); } @Override public void onClick(View v) { byte[] accessPassword = Tools.HexString2Bytes("00000000"); List tagList; // addr = Integer.valueOf(editAddr.getText().toString()); // length = Integer.valueOf(editLength.getText().toString()); switch (v.getId()) { case R.id.scan_button: if (!startFlag) { startFlag = true; buttonStart.setText("停 止"); } else { startFlag = false; buttonStart.setText("扫 描"); } break; case R.id.button: Intent intent = new Intent(this, HomePageActivity.class); startActivity(intent); break; } } @Override public void onResume() { super.onResume(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } registerReceiver(); } @Override public void onPause() { startFlag = false; buttonStart.setText("扫 描"); // manager.close(); unregisterReceiver(); Log.e("onPause", "onPause:+ " ); super.onPause(); } @Override protected void onDestroy() { startFlag = false; runFlag = false; // if (manager != null) { // manager.close(); // manager = null; // 重置manager引用 // } Log.e("onDestroy", "onDestroy:+ " ); super.onDestroy(); } private void initView() { textVersion = (TextView) findViewById(R.id.in_santext); buttonStart = (Button) findViewById(R.id.scan_button); buttonBack =(Button) findViewById(R.id.button); pinpai = (TextView) findViewById(R.id.pinpai); xinghao = (TextView) findViewById(R.id.xinghao); cengji = (TextView) findViewById(R.id.cengji); huawen = (TextView) findViewById(R.id.huawen); buttonStart.setOnClickListener(this); buttonBack.setOnClickListener(this); listEPC = new ArrayList(); } private long exitTime = 0; /** * show Toast */ private Toast mToast; private Toast toast; /** * Inventory EPC Thread */ class InventoryThread extends Thread { private List tagList; byte[] accessPassword = Tools.HexString2Bytes("00000000"); @Override public void run() { super.run(); while (runFlag) { if (startFlag) { tagList = manager.inventoryRealTime(); //实时盘存 if (tagList != null && !tagList.isEmpty()) { //播放提示音 Util.play(1, 0); for (TagModel tag : tagList) { if (tag == null) { String epcStr = ""; // String epcStr = new String(epc); addToList(listEPC, epcStr, (byte) -1); } else { String epcStr = Tools.Bytes2HexString(tag.getmEpcBytes(), tag.getmEpcBytes().length); // String epcStr = new String(epc); byte rssi = tag.getmRssi(); addToList(listEPC, epcStr, rssi); } } } tagList = null; try { Thread.sleep(20); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } // EPC add to LISTVIEW private void addToList(final List list, final String epc, final byte rssi) { runOnUiThread(new Runnable() { @Override public void run() { // The epc for the first time if (list.isEmpty()) { EPC epcTag = new EPC(); epcTag.setEpc(epc); epcTag.setCount(1); epcTag.setRssi(rssi); list.add(epcTag); listepc.add(epc); }else { for (int i = 0; i < list.size(); i++) { EPC mEPC = list.get(i); // list contain this epc if (epc.equals(mEPC.getEpc())) { mEPC.setCount(mEPC.getCount() + 1); mEPC.setRssi(rssi); list.set(i, mEPC); break; } else if (i == (list.size() - 1)) { // list doesn't contain this epc EPC newEPC = new EPC(); newEPC.setEpc(epc); newEPC.setCount(1); newEPC.setRssi(rssi); list.add(newEPC); listepc.add(epc); } } } // play sound lastTime = SystemClock.elapsedRealtime(); long time = lastTime - nextTime; if (time >= 60) { Util.play(1, 0); nextTime = lastTime; Log.e("TAG", "run: " + time); } } }); Log.e("EPC", "listepc:+ " + listepc); if (listepc != null && !listepc.isEmpty()){ startFlag = false; buttonStart.setText("扫 描"); textVersion.setText(listepc.get(0).toString()); //请求后台 find(listepc.get(0).toString()); } clearData(); } long lastTime; long nextTime; // Make the button clickable or unclickable private void setButtonClickable(Button button, boolean flag) { button.setClickable(flag); if (flag) { button.setTextColor(Color.BLACK); } else { button.setTextColor(Color.GRAY); } } private void showToast(String message) { if (mToast == null) { mToast = Toast.makeText(TyreSearchActivity.this, message, Toast.LENGTH_SHORT); mToast.show(); } else { mToast.setText(message); mToast.show(); } } private void clearData() { listEPC.removeAll(listEPC); listepc.removeAll(listepc); } private KeyReceiver keyReceiver; private void registerReceiver() { keyReceiver = new KeyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.rfid.FUN_KEY"); filter.addAction("android.intent.action.FUN_KEY"); registerReceiver(keyReceiver, filter); } private void unregisterReceiver() { unregisterReceiver(keyReceiver); } private class KeyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int keyCode = intent.getIntExtra("keyCode", 0); if (keyCode == 0) { keyCode = intent.getIntExtra("keycode", 0); } boolean keyDown = intent.getBooleanExtra("keydown", false); if (keyDown) { if (toast == null) { // toast = Toast.makeText(TyreSearchActivity.this, "KeyReceiver:keyCode = down" + keyCode, Toast.LENGTH_SHORT); } else { // toast.setText("KeyReceiver:keyCode = down" + keyCode); } //toast.show(); switch (keyCode) { case KeyEvent.KEYCODE_F1: case KeyEvent.KEYCODE_F2: case KeyEvent.KEYCODE_F3: case KeyEvent.KEYCODE_F4: case KeyEvent.KEYCODE_F5: //触发扫描动作 onClick(buttonStart); break; } } } } // 基本信息查询 private void find(String epc) { //showLoadingDialog(); OkGo.post(MyUrl.url + "/tyre/tyre/pdaQueryTyreInfo").tag(this) .params("tyreEpc", epc) .execute(new StringCallback() { @Override public void onSuccess(Response response) { // hideLoadingDialog(); String body = response.body(); try { Gson gson = new Gson(); BaseTyre baseTyre = gson.fromJson(body, BaseTyre.class); if (baseTyre != null) { // 空值处理:若字段为 null 则显示空字符串 String brand = safeGetString(baseTyre.getTyreBrand()); String model = safeGetString(baseTyre.getTyreModel()); String level = safeGetString(baseTyre.getTyreLevel()); String pattern = safeGetString(baseTyre.getTyrePattern()); pinpai.setText(brand); xinghao.setText(model); cengji.setText(level); huawen.setText(pattern); }else { pinpai.setText(""); xinghao.setText(""); cengji.setText(""); huawen.setText(""); } } catch (JsonSyntaxException e) { // 处理 JSON 解析错误 pinpai.setText(""); xinghao.setText(""); cengji.setText(""); huawen.setText(""); return; } } }); } private String safeGetString(String value) { return value == null || "null".equals(value) ? "" : value; } }