package com.example.medicalwastepda.mvp.view.test;
import android.app.ProgressDialog;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
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 androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.common.base.BaseActivity;
import com.example.common.uitls.StringUtils;
import com.example.medicalwastepda.R;
import com.rscja.deviceapi.RFIDWithUHF;
import java.util.ArrayList;
import java.util.HashMap;
import butterknife.BindView;
/**
* @author Coco
* @time 2020/9/15 9:52
* @classname TestActivity
* description:测试RFID
*/
public class TestActivity extends BaseActivity {
@BindView(R.id.btnStart)
Button btnStart;
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.tvCount)
TextView tvCount;
private RFIDWithUHF mReader;
private TestAdapter adapter;
@Override
public String initActionBar() {
return null;
}
@Override
public int getRootView() {
return R.layout.activity_test;
}
@Override
public void setTitle() {
}
private SoundPool soundPool;
private AudioManager am;
HashMap<Integer, Integer> soundMap = new HashMap<Integer, Integer>();
private boolean loopFlag = false;
@Override
protected void initView(Bundle savedInstanceState) {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
initSound();
initUHF();
adapter = new TestAdapter(tagList);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
readTag();
}
});
recyclerView.setAdapter(adapter);
clearData();
}
private void clearData() {
tvCount.setText("0");
tagList.clear();
adapter.notifyDataSetChanged();
}
private void initSound() {
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 5);
soundMap.put(1, soundPool.load(this, R.raw.barcodebeep, 1));
soundMap.put(2, soundPool.load(this, R.raw.serror, 1));
// 实例化AudioManager对象
am = (AudioManager) this.getSystemService(AUDIO_SERVICE);
}
private void initUHF() {
try {
mReader = RFIDWithUHF.getInstance();
} catch (Exception e) {
showToast(e.getMessage());
}
if (mReader != null) {
new InitTask().execute();
}
}
public class InitTask extends AsyncTask<String, Integer, Boolean> {
ProgressDialog mypDialog;
@Override
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
return mReader.init();
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
mypDialog.cancel();
if (!result) {
showToast("初始化失败");
}
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
mypDialog = new ProgressDialog(TestActivity.this);
mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mypDialog.setMessage("init...");
mypDialog.setCanceledOnTouchOutside(false);
mypDialog.show();
}
}
@Override
protected void initData(Bundle savedInstanceState) {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void initBarCodeReader() {
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
stopInventory();
}
@Override
public void onDestroy() {
if (mReader != null) {
mReader.free();
}
super.onDestroy();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == 139 || keyCode == 280) {
if (event.getRepeatCount() == 0) {
readTag();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* 停止识别
*/
private void stopInventory() {
if (loopFlag) {
loopFlag = false;
if (mReader.stopInventory()) {
btnStart.setText("开始识别");
} else {
showToast("停止失败");
}
}
}
public void clearData(View view) {
clearData();
}
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);
}
}
}
}
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();
}
// // 单步
// String strUII = mReader.inventorySingleTag();
// if (!TextUtils.isEmpty(strUII)) {
// String strEPC = mReader.convertUiiToEPC(strUII);
// addEPCToList(strEPC, "N/A");
// tvCount.setText("" + adapter.getItemCount());
// } else {
// showToast("失败哦!");
// }
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String result = msg.obj + "";
String[] strs = result.split("@");
addEPCToList(strs[0], strs[1]);
playSound(1);
}
};
private float volumnRatio;
/**
* 播放提示音
*
* @param id 成功1,失败2
*/
public void playSound(int id) {
// 返回当前AudioManager对象的最大音量值
float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 返回当前AudioManager对象的音量值
float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);
volumnRatio = audioCurrentVolumn / audioMaxVolumn;
try {
soundPool.play(soundMa