package eVVM.apk.ui.vaccination; import android.app.Dialog; import android.content.Intent; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.os.Build; import android.os.Parcelable; import android.support.annotation.RequiresApi; import android.util.Log; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.CycleInterpolator; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.ProgressBar; import com.hjq.dialog.MessageDialog; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import butterknife.BindView; import butterknife.OnClick; import eVVM.apk.R; import eVVM.apk.helper.ConversionUtil; import eVVM.apk.helper.SPUtils; import eVVM.apk.helper.SoundPoolHelper; import eVVM.apk.ui.bean.VnDetailBean; import eVVM.apk.ui.home.BaseNfcActivity; import eVVM.apk.ui.home.uploadChip.UploadChipContract; import eVVM.apk.ui.vaccination.save.ChipModel; public class ReadingActivity extends BaseNfcActivity implements UploadChipContract.View { private boolean isWarning = false; private ChipModel chipModel; private SoundPoolHelper soundPoolHelper; private String textRecord = ""; private String chipNumber = ""; @BindView(R.id.reading__line) ImageView imgreadline; @BindView(R.id.reading_progress) ProgressBar readingProgress; @Override protected int getLayoutId() { return R.layout.activity_reading; } @Override protected int getTitleId() { return R.id.reading_title; } @Override protected void initView() { getAnimationSao(); //进行雷达扫描动画 soundPoolHelper = new SoundPoolHelper(4,SoundPoolHelper.TYPE_MUSIC) .setRingtoneType(SoundPoolHelper.RING_TYPE_MUSIC) .loadDefault(ReadingActivity.this) .load(ReadingActivity.this,"factory_operator_success",R.raw.factory_operator_success) .load(ReadingActivity.this,"factory_operator_error",R.raw.factory_operator_error) .load(ReadingActivity.this,"xufuhe",R.raw.xufuhe) .load(ReadingActivity.this,"zhengchang",R.raw.zhengchang);; } private void getAnimationSao() { Animation animation=new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); animation.setFillAfter(true); animation.setDuration(2000); //两秒转一圈 animation.setInterpolator(new LinearInterpolator()); animation.setRepeatCount(Animation.INFINITE); //循环执行 imgreadline.startAnimation(animation); int [] antenna = new int[]{R.id.reading_antenna1,R.id.reading_antenna2,R.id.reading_antenna3,R.id.reading_antenna4,R.id.reading_antenna5,R.id.reading_antenna6, R.id.reading_antenna7,R.id.reading_antenna8,R.id.reading_antenna9}; int nfcWireIndex = 2; try{ nfcWireIndex = Integer.parseInt(String.valueOf(SPUtils.get("PHONE_MODEL","2"))); }catch (Exception e){ e.printStackTrace(); } AlphaAnimation alp = new AlphaAnimation(1, 0.2f); alp.setStartOffset(500); alp.setDuration(1000); alp.setFillAfter(false); alp.setInterpolator(new CycleInterpolator(2)); alp.setRepeatCount(Animation.INFINITE); findViewById(antenna[nfcWireIndex - 1]).setAnimation(alp); alp.start(); } @OnClick({R.id.again_bt}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.again_bt: startActivityFinish(QrCodeActivity.class); break; } } @Override protected void initData() { mNfcAdapter = NfcAdapter.getDefaultAdapter(this); } /** * 读取NFC标签文本数据 */ private String readNfcTag(Intent intent) { readingProgress.setProgress(0); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msgs[] = null; if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } } try { if (msgs != null) { NdefRecord record = msgs[0].getRecords()[0]; return parseTextRecord(record); } } catch (Exception e) { } } return null; } public String parseTextRecord(NdefRecord ndefRecord) { if (ndefRecord.getTnf() != NdefRecord.TNF_WELL_KNOWN) { return null; } if (!Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) { return null; } try { byte[] bArray = ndefRecord.getPayload(); StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); } return sb.toString(); } catch (Exception e) { throw new IllegalArgumentException(); } } @Override public void onNewIntent(Intent intent) { textRecord = readNfcTag(intent); if(textRecord == null || textRecord.length() < chipNumberEndIndex){ toast("读取失败"); return; } isWarning = false; chipNumber = textRecord.substring(6,chipNumberEndIndex); uploadChip(); alarmDetection(); } //判断是否报警 public void alarmDetection(){ try{ String binaryStr = ConversionUtil.hexToBins(textRecord.substring((3 + 40 + 1 + 4 + 8) * 2)); binaryStr = binaryStr.substring(4,binaryStr.length() - 8); //减去启用后的一小时和注射前的两小时 Log.e("温度二进制",binaryStr); String binaryArr[] = new String[binaryStr.length() / 2]; for (int i = 0; i < binaryArr.length ; i++) { binaryArr[i] = String.valueOf(binaryStr.charAt(i * 2)) + binaryStr.charAt(i * 2 + 1); } LinkedList exceedingIndexs = new LinkedList(); exceedingIndexs.add(-1); for (int i = 0; i < binaryArr.length; i++) { if(!binaryArr[i].equals("01")){ if(i != 0 && !exceedingIndexs.get(exceedingIndexs.size() - 1).equals(i)){ exceedingIndexs.add(i); } if(i != binaryArr.length - 1 && !exceedingIndexs.get(exceedingIndexs.size() - 1).equals(i + 1)){ exceedingIndexs.add(i + 1); } } } int type = Integer.parseInt(chipNumber.substring(1,2), 16); int category = Integer.parseInt(SPUtils.get("CATEGORY_TIMES_" + type,48).toString()); if((exceedingIndexs.size() - 1) / 2.f > category){ // toast("报警"); isWarning = true; soundPoolHelper.play("xufuhe",false); warning(); }else{ isWarning = false; soundPoolHelper.play("zhengchang",false); } readingProgress.setProgress(100); }catch (Exception e){ e.printStackTrace(); } } private void uploadChip(){ if(textRecord != null && textRecord.length() > chipNumberEndIndex){ if(SPUtils.contains("LOCATION")){ Log.e("LOCATION",SPUtils.get("LOCATION","").toString()); String location[] = SPUtils.get("LOCATION","").toString().split(","); if(location.length > 1){ Double latitude = Double.parseDouble(location[0]); Double longitude = Double.parseDouble(location[1]); String inoculators = (String)SPUtils.get("INOCULATOR_LIST",""); Log.e("chipNumber", chipNumber); Log.e("textRecord", textRecord); getPresenter().forDoctor(chipNumber,textRecord,inoculators,longitude,latitude); chipModel = new ChipModel(chipNumber,textRecord,inoculators,longitude,latitude); }else { toast("位置信息错误"); } }else{ toast("位置信息获取失败"); } }else{ toast("芯片识别错误"); } } @Override public void uploadChipError(String msg) { if(msg.equals("芯片不存在")){ // soundPoolHelper.play("factory_operator_error",false); } //保存未提交信息 if(msg.indexOf("请检查您的网络状态") != -1 ){ String user_id = (String) SPUtils.get("USER_ID", ""); if (!user_id.equals("")){ ArrayList chipModelList = (ArrayList) SPUtils.get("CHIP_MODEL_LIST_" + user_id,new ArrayList ()); chipModelList.add(chipModel); SPUtils.put("CHIP_MODEL_LIST_" + user_id,chipModelList); SPUtils.remove("INOCULATOR_LIST"); finish(); } } toast(msg); } @Override public void uploadChipSuccess(VnDetailBean data) { VnDetailBean.DataBean dataBean = data.getData(); // soundPoolHelper.play("factory_operator_success",false); SPUtils.remove("INOCULATOR_LIST"); Intent in = new Intent(ReadingActivity.this, VnReportDetailForDoctorActivity.class); in.putExtra("dataBean",dataBean); in.putExtra("isWarning",isWarning); startActivityFinish(in); } private void warning(){ new MessageDialog.Builder(this) .setTitle("") // 标题可以不用填写 .setMessage("此疫苗需复核,是否继续使用?") .setConfirm("确定") .setCancel("取消") // 设置 null 表示不显示取消按钮 //.setAutoDismiss(false) // 设置点击按钮后不关闭对话框 .setListener(new MessageDialog.OnListener() { @Override public void onConfirm(Dialog dialog) { uploadChip(); } @Override public void onCancel(Dialog dialog) { //toast("取消了"); } }) .show(); } @Override protected void onStart() { super.onStart(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } // // @Override // public void onBackPressed() { // if (DoubleClickHelper.isOnDoubleClick()) { // //移动到上一个任务栈,避免侧滑引起的不良反应 // moveTaskToBack(false); // postDelayed(new Runnable() { // // @Override // public void run() { // // 进行内存优化,销毁掉所有的界面 // ActivityStackManager.getInstance().finishAllActivities(); // // 销毁进程 // System.exit(0); // } // }, 300); // } else { // toast(getResources().getString(R.string.home_exit_hint)); // } // } @Override public boolean isSupportSwipeBack() { // 不使用侧滑功能 return false; } }