CPU 定时器 循环读卡


 
 

package com.test.psamsimple; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.fxpsam.nativeJni.RfidNative; import com.guo.android_extend.java.AbsLoop; import java.util.Timer; import java.util.TimerTask; /** * Created by admin on 2017/5/15. */ public class CPUActivity extends MyBaseActivity { private MyApplication mapp; private RfidNative rfid; private FRAbsLoop mFRAbsLoop = null; private Handler mhandle=new Handler(); private MyHandler myHandler=new MyHandler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContext(this); setContentView(R.layout.activity_cpu); setTitle(getResources().getString(R.string.cpu)); mapp = (MyApplication) getApplication(); rfid = mapp.getRfid(); Util.initSoundPool(this); } boolean activeFlag = false; int ret = 0; //active CPU card private void active() { byte[] result = new byte[64]; activeFlag = false; ret = rfid.activeUcpu(result); if (ret > 0) { activeFlag = true; Tools.Bytes2HexString(result, ret) + "\n"); byte[] apduDF = Tools.HexString2Bytes("00A40000022001"); ret = rfid.apduCpu(apduDF, 0, result); if (ret > 0) { // editTips.append(Tools.Bytes2HexString(result, ret)); // if(Tools.Bytes2HexString(result, ret).contains("9000")){ byte[] apduRandom = Tools.HexString2Bytes("0084000008"); ret = rfid.apduCpu(apduRandom, 0, result); String response = Tools.Bytes2HexString(result, ret); //editTips.append(response); if(response.length()>4){ String cpu_backRandom = response.substring(0, response.length() - 4); //psam ret = rfid.psamreset(2, result);//psamCard if (ret > 0) { byte[] internalValidation = Tools.HexString2Bytes("0088000108" + cpu_backRandom); ret = rfid.psamapdu(2, internalValidation, result); // editTips.setText("\n内" + Tools.Bytes2HexString(result, ret)); ret = rfid.psamapdu(2, Tools.HexString2Bytes("00c0000008"), result);//6108 PSAM_GET_RESPOND String psam_data = Tools.Bytes2HexString(result, ret); // editTips.setText("\n密" + psam_data); if (psam_data.contains("9000")) { String encrypt_data = psam_data.substring(0, psam_data.length() - 4); byte[] exiternal = Tools.HexString2Bytes("0082000008" + encrypt_data); ret = rfid.apduCpu(exiternal, 0, result); // editTips.setText("\n外" + Tools.Bytes2HexString(result, ret)); byte[] read_binary = Tools.HexString2Bytes("00b0810008"); ret = rfid.apduCpu(read_binary, 0, result); String back_data = Tools.Bytes2HexString(result, ret); if(back_data.length()>4){ String card_Number = back_data.substring(0, back_data.length() - 4); byte[] card_NumberByte = Tools.HexString2Bytes(card_Number); if (card_NumberByte.length > 0) { Util.play(1, 0); int cardNumber = bytesToInt(card_NumberByte, 0); Log.e("读卡卡号==,", ""+cardNumber); Message msg=new Message(); msg.what=1; myHandler.sendMessage(msg); mFRAbsLoop.shutdown(); } else { Log.e("长度", "长度 faill"; // close(); } }else{ Log.e("6983 文件锁定,", ""); } }else{ Log.e("加密失败 !=9000,", ""); // close(); } }else{ Log.e("随机数加密失败 ,", " "); } } else { Log.e("PSAM认证卡槽失败", "psamCard 2 faill"); //close(); } } else { Log.e("读卡程序,", "apdu_fail"); // close(); } } else { Log.e("读卡程序,", "no_card_search"); // close(); } } public class MyHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 1: Intent in=new Intent(); in.setClass(CPUActivity.this,M1Activity.class); CPUActivity.this.startActivity(in); break; } } } public static int bytesToInt(byte[] ary, int offset) { int value; value = (int) ((ary[offset] & 0xFF) | ((ary[offset + 1] << 8) & 0xFF00) | ((ary[offset + 2] << 16) & 0xFF0000) | ((ary[offset + 3] << 24) & 0xFF000000)); return value; } //close CPU card private void close() { if (activeFlag) { ret = rfid.closeUCPU(); if (ret > 0) { Log.e("关卡close_success,", "no_active_card_recv"); } else { Log.e("关卡close_fail,", "no_active_card_recv"); } } else { Log.e("关卡,", "no_active_card_recv"); } } @Override protected void onResume() { super.onResume();

// 第一种:循环读卡线程

 
 
compile 'com.guo.android_extend:android-extend:1.0.1'  api>9

mFRAbsLoop = new FRAbsLoop(mhandle);
mFRAbsLoop.start();








// isPause = false;//第二种:循环读卡线程
// Thread thread = new Thread(timeRunable);
// thread.start();
}

@Override
protected void onPause() {
super.onPause();
}

@Override
protected void onStop() {
super.onStop();
mFRAbsLoop.shutdown();
}

@Override
protected void onDestroy() {
super.onDestroy();
}

class FRAbsLoop extends AbsLoop {
Handler mhandle;
long currentSecond=0;//当前毫秒数
boolean isPause = false;//是否暂停
public FRAbsLoop(Handler mhandle) {
this.mhandle=mhandle;
}

@Override
public void setup() {
//计时器

}

@Override
public void loop() {

currentSecond = currentSecond + 1000;
if (!isPause) {
mhandle.postDelayed(this, 1500);
//递归调用本runable对象,实现每隔一秒一次执行任务
//关闭定时器handler.removeCallbacks(runnable);
Log.e("递归调用本runable对象读卡程序,", "");
active();

}


}

@Override
public void over() {

}
}








// /*****************计时器*******************/
// private Runnable timeRunable = new Runnable() {
// @Override
// public void run() {
// currentSecond = currentSecond + 1000;
// if (!isPause) {
// mhandle.postDelayed(this, 1000);
// //递归调用本runable对象,实现每隔一秒一次执行任务
// //关闭定时器handler.removeCallbacks(runnable);
// Log.e("递归调用本runable对象读卡程序,", "");
// active();
//
// }
// }
// };
// //计时器
// private Handler mhandle = new Handler();
// private boolean isPause = false;//是否暂停
// private long currentSecond = 0;//当前毫秒数
///*****************计时器*******************/





}

猜你喜欢

转载自blog.csdn.net/qq_34075348/article/details/80953002