package khdz.click.com.hf_handhelddevice.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.fxpsam.nativeJni.RfidNative; import com.guo.android_extend.java.AbsLoop; import java.util.List; import khdz.click.com.hf_handhelddevice.CompareCarder; import khdz.click.com.hf_handhelddevice.FileDataHelp; import khdz.click.com.hf_handhelddevice.MyApplication; import khdz.click.com.hf_handhelddevice.R; import khdz.click.com.hf_handhelddevice.data.CollectiveCardAuthorizationDate; import khdz.click.com.hf_handhelddevice.data.CollectiveCardAuthorizationTime; import khdz.click.com.hf_handhelddevice.data.CollectiveCardInfo; import khdz.click.com.hf_handhelddevice.tools.Tools; import khdz.click.com.hf_handhelddevice.tools.Utils; public class BaseActivity extends Activity { //SerialPort public Context context; private MyApplication mapp; private RfidNative rfid; boolean activeFlag = false; private int ret = 0,PSAM_CardSlot=2;// SIM1=1 SIM2 =2 private ReadCarderLoop myReadCarderLoop = null; private Handler mhandle=new Handler(); private MyHandler handler; private CompareCarder compareCarder=null; SharedPreferences preferences_sam ; SharedPreferences.Editor editor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_base); context=this; preferences_sam =context.getSharedPreferences("SAM_CardSlot", Context.MODE_PRIVATE); editor = preferences_sam.edit(); mapp = (MyApplication) getApplication(); rfid = mapp.getRfid(); new Runnable() { @Override public void run() { if((checkPSAM_CardSlot(2,1)&&!checkPSAM_CardSlot(1,2)) ||(!checkPSAM_CardSlot(2,1)&&checkPSAM_CardSlot(1,2))){ }else{ compareCardFail(context,"NONE_PSAM"); } } }; compareCarder=new CompareCarder(context); handler = new MyHandler(); } private boolean checkPSAM_CardSlot(int psam_cardSlot,int after_psam_cardSlot) { int index=0; byte[] result = new byte[64]; boolean checkPSAM = false; ret = rfid.psamreset(psam_cardSlot, result);//psamCard if (ret > 0) { editor.putInt("sam_card", psam_cardSlot); editor.commit(); checkPSAM = true; }else{ checkPSAM=false; } return checkPSAM; } /*** * read carder * must be implemented */ @Override protected void onResume() { super.onResume(); SharedPreferences preferences = getSharedPreferences("SAM_CardSlot", Context.MODE_PRIVATE); PSAM_CardSlot=preferences.getInt("sam_card", 0); myReadCarderLoop = new ReadCarderLoop(mhandle); myReadCarderLoop.start(); } @Override protected void onPause() { super.onPause(); myReadCarderLoop.shutdown();//onPause stop read carder } public class MyHandler extends Handler { public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: int carderNumber=(int)msg.obj; beginComperCarder(carderNumber); break; } } } class ReadCarderLoop extends AbsLoop { Handler mhandle; long currentSecond=0;// boolean isPause = false;//isPause public ReadCarderLoop(Handler mhandle) { this.mhandle=mhandle; } @Override public void setup() { } @Override public void loop() { if(openCarder()){ if(!active()){ return; } }else{ openCarder(); } } @Override public void over() { } } private boolean openCarder() { byte[] result = new byte[64]; boolean openCarder = false; ret = rfid.activeUcpu(result); if (ret > 0) { openCarder = true; }else{ openCarder = false; } return openCarder; } //active CPU card private boolean active() { byte[] result = new byte[64]; boolean isContinue=true; int index=0; byte[] apduDF = Tools.HexString2Bytes("00A40000022001"); ret = rfid.apduCpu(apduDF, 0, result); if (ret > 0) { // if(Tools.Bytes2HexString(result, ret).contains("9000")){ byte[] apduRandom = Tools.HexString2Bytes("0084000008"); ret = rfid.apduCpu(apduRandom, 0, result); String response = Tools.Bytes2HexString(result, ret); if(response.length()>0){ String cpu_backRandom = response.substring(0, response.length() - 4); //psam ret = rfid.psamreset(PSAM_CardSlot, result);//psamCard if (ret > 0) { byte[] internalValidation = Tools.HexString2Bytes("0088000108" + cpu_backRandom); ret = rfid.psamapdu(PSAM_CardSlot, internalValidation, result); //sam_receive_data.setText("\n内" + Tools.Bytes2HexString(result, ret)); ret = rfid.psamapdu(PSAM_CardSlot, Tools.HexString2Bytes("00c0000008"), result);//6108 PSAM_GET_RESPOND String psam_data = Tools.Bytes2HexString(result, ret); //sam_receive_data.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); // sam_receive_data.setText("\n外" + Tools.Bytes2HexString(result, ret)); byte[] read_binary = Tools.HexString2Bytes("00b0810008"); ret = rfid.apduCpu(read_binary, 0, result); String card_Number=""; if(result.length>64){ String back_data = Tools.Bytes2HexString(result, ret); card_Number = back_data.substring(0, back_data.length() - 4); }else{ card_Number=Tools.Bytes2HexString(result, ret); } byte[] card_NumberByte = Tools.HexString2Bytes(card_Number); if (card_NumberByte.length > 0 &&card_NumberByte.length!=2) { int cardNumber = Tools.bytesToInt(card_NumberByte, 0); //Message==1 beginComperCarder(cardNumber); Message msg=new Message(); msg.what=1; msg.obj=cardNumber; handler.sendMessage(msg); myReadCarderLoop.shutdown(); Utils.playerVoice(BaseActivity.this, 6); } else { isContinue=false; String back_data = Tools.Bytes2HexString(result, ret); // Log.e(" length faill,", ""+back_data); } }else{ isContinue=false; } } else { isContinue=false; } }else{ isContinue=false; //Log.e(",", ""); } } else { isContinue=false; //Log.e("apdu_fail,", "apdu_fail"); } return isContinue; } //close CPU card if (activeFlag) {ret = rfid.closeUCPU();if (ret > 0)=close_success private void beginComperCarder(int carderNumber) { String UID = String.valueOf(carderNumber); if(!UID.equals("")){ CollectiveCardInfo collectiveCardInfo=FileDataHelp.collectiveCard(MyApplication.COLLECTIVITY_INFO_FILE,UID ); if(collectiveCardInfo!=null){ CollectiveCardAuthorizationDate dateInfo=FileDataHelp.collectiveCardDate(MyApplication.COLLECTIVITY_AUTH9_FILE,collectiveCardInfo.getCollective_carder_id()); List<CollectiveCardAuthorizationTime> timeList=FileDataHelp.collectiveCardTime(MyApplication.COLLECTIVITY_AUTH10_FILE,collectiveCardInfo.getCollective_carder_id()); if(collectiveCardInfo.getCarderNumber()!=null&&dateInfo.getDate_start()!=null&&dateInfo.getDate_end()!=null){ collectiveCardInfo.setCollectiveDateInfo(dateInfo); collectiveCardInfo.setCollectiveTimeInfo(timeList); compareCarder.collectiveCarder(context,collectiveCardInfo,UID); }else{ compareCarder.personCarder( context,UID); } } else{ compareCarder.personCarder( context,UID); } }else{ compareCardFail(context,""); } } public void compareCardFail(Context activity, String carderId) { Intent intent = new Intent(); intent.putExtra("uid", carderId); intent.setClass(activity, UnknownCarderActivity.class);//UnknownCarderActivity activity.startActivity(intent); } }