BaseActivity修


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);
    }

}

猜你喜欢

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