东信EST-100系列身份证读卡器安卓开发包,以下为源代码

package com.example.sdkdemo;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;import com.reader.usbdevice.DeviceLib;
import com.reader.usbdevice.DeviceStatusCallback;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class MainActivity extends Activity {private static final String TAG = "com.example.sdkdemo.MainActivity";private LinearLayout llGroup = null;private EditText etKey=null;private EditText etData=null;private EditText etTrack=null;private EditText etTime=null;private Spinner spSector = null, spAddress = null, spSound = null;private ArrayAdapter<String> secnrAdap, addrAdap, soundAdap;private DeviceLib mdev = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);InitSpinner();InitEditText();InitButton();}private void showString(String msg) {TextView tv = new TextView(this);tv.setTextColor(Color.rgb(0x15, 0xA8, 0x95));tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);tv.setText(msg);llGroup.addView(tv);}private void showToast(String msg) { Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); }private void InitSpinner() {String[] mItemsecnr = getResources().getStringArray(R.array.sector_items);String[] mItemaddr = getResources().getStringArray(R.array.address_items);String[] mSoundType = getResources().getStringArray(R.array.sound_types);spSector = (Spinner) findViewById(R.id.spSector);secnrAdap = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItemsecnr);secnrAdap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spSector.setAdapter(secnrAdap);spAddress = (Spinner) findViewById(R.id.spAddress);addrAdap = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItemaddr);addrAdap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spAddress.setAdapter(addrAdap);spSound = (Spinner) findViewById(R.id.spSound);soundAdap = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mSoundType);soundAdap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spSound.setAdapter(soundAdap);}private void InitEditText() {etKey = (EditText)findViewById(R.id.etKey);etData = (EditText)findViewById(R.id.etData);etTrack = (EditText)findViewById(R.id.etTrack);etTime = (EditText)findViewById(R.id.etTimeout);llGroup = (LinearLayout)findViewById(R.id.ll);}private void InitButton() {Button btnOpenDevice = (Button)findViewById(R.id.btn_open);Button btnCloseDevice = (Button)findViewById(R.id.btn_close);Button btnPosBeep = (Button)findViewById(R.id.btn_beep);Button btnClear = (Button)findViewById(R.id.btn_clear);Button btnM1CardRead = (Button)findViewById(R.id.btn_m1read);Button btnM1CardWrite = (Button)findViewById(R.id.btn_m1write);Button btnMagCardRead = (Button)findViewById(R.id.btn_readMagCard);Button btn15693 = (Button)findViewById(R.id.btn_15693);Button btnSiCardRead = (Button)findViewById(R.id.btn_sicard);Button btnCertCardRead = (Button)findViewById(R.id.btn_certCard);Button btnCertCardIDRead = (Button)findViewById(R.id.btn_certCardID);Button btnbankCard = (Button)findViewById(R.id.btn_bankCard);Button btnGetInputPass = (Button)findViewById(R.id.btn_getInputpass);btnOpenDevice.setOnClickListener(new SampleOnClickListener());btnCloseDevice.setOnClickListener(new SampleOnClickListener());btnPosBeep.setOnClickListener(new SampleOnClickListener());btnClear.setOnClickListener(new SampleOnClickListener());btnM1CardRead.setOnClickListener(new SampleOnClickListener());btnM1CardWrite.setOnClickListener(new SampleOnClickListener());btnMagCardRead.setOnClickListener(new SampleOnClickListener());btn15693.setOnClickListener(new SampleOnClickListener());btnSiCardRead.setOnClickListener(new SampleOnClickListener());btnCertCardRead.setOnClickListener(new SampleOnClickListener());btnCertCardIDRead.setOnClickListener(new SampleOnClickListener());btnbankCard.setOnClickListener(new SampleOnClickListener());btnGetInputPass.setOnClickListener(new SampleOnClickListener());}private class SampleOnClickListener implements View.OnClickListener {@Overridepublic void onClick(View view) {try {switch (view.getId()) {case R.id.btn_open:mdev = new DeviceLib(getApplicationContext(), new DeviceStatusCallback() {@Overridepublic void UsbAttach() { showToast(getString(R.string.dev_link_succ)); }@Overridepublic void UsbDeAttach() { showToast(getString(R.string.dev_link_error)); }});mdev.openDevice(100);break;case R.id.btn_beep:mdev.ICC_PosBeep((byte) 10);break;case R.id.btn_clear:llGroup.removeAllViews();break;case R.id.btn_m1read:FindCard();readM1Card();break;case R.id.btn_m1write:FindCard();readM1Write();break;case R.id.btn_15693:read15693();break;case R.id.btn_readMagCard:readMagCard();break;case R.id.btn_certCard:readIDCard();break;case R.id.btn_certCardID:readIDCardUID();break;case R.id.btn_sicard:readSiCard();break;case R.id.btn_bankCard:readBankCard();break;default:break;}} catch (SecurityException securityException) {showToast(getString(R.string.error));}}}private void FindCard(){if (!mdev.isOpen()) {showString("设备未连接!"); return;}byte[]    uid     = new byte[10];byte    type    = (byte)0x41; //0x41 表示TypeA、M1if( mdev.PICC_Reader_Request() != 0 ){showString("请求卡片失败"); return;}if( mdev.PICC_Reader_anticoll(uid) != 0 ){showString("防碰撞失败"); return;}showString("UID:" + mdev.arrayByteToString(uid, 4));if( mdev.PICC_Reader_Select(type) != 0 ){showString("选卡失败");}else {showString("寻卡成功");}}private void readM1Card() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}int nRt = -99;byte mode = 0x60; //这里默认用KeyA,如果使用KeyB值为0x61byte[] resp = new byte[30];byte[] bysKey  = new byte[10];byte addr = ((byte)spAddress.getSelectedItemPosition());byte secnr = ((byte)spSector.getSelectedItemPosition());String key = etKey.getText().toString().trim();bysKey = mdev.HexString2Bytes(key);nRt =  mdev.PICC_Reader_Authentication_Pass(mode, secnr, bysKey);if(nRt != 0) {showString("秘钥认证失败:" + nRt);return;}else {showString("秘钥认证成功");}Arrays.fill(resp, (byte)0);nRt =  mdev.PICC_Reader_Read((byte)addr, resp);if(nRt != 0) {showString("读卡失败:" + nRt);}else {showString("读卡成功,HEXSTR:" + new String( mdev.arrayByteToString(resp, 16)));try {showString("读卡成功:" + new String(resp, "gbk") );} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void readM1Write() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}int nRt = -99;byte mode = 0x60; //这里默认用KeyA,如果使用KeyB值为0x61byte[] data = new byte[30];byte[] bysKey  = new byte[10];byte addr = ((byte)spAddress.getSelectedItemPosition());byte secnr = ((byte)spSector.getSelectedItemPosition());String key = etKey.getText().toString().trim();bysKey = mdev.HexString2Bytes(key);try {Arrays.fill(data, (byte)0x00);data = etData.getText().toString().trim().getBytes("GBK");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}nRt =  mdev.PICC_Reader_Authentication_Pass(mode, secnr, bysKey);if(nRt != 0) {showString("秘钥认证失败:" + nRt);return;}else {showString("秘钥认证成功");}nRt =  mdev.PICC_Reader_Write((byte)addr, data);if(nRt != 0) {showString("写卡失败:" + nRt);}else {showString("写卡成功");}}private void read15693() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}byte[] uid = new byte[20];byte[] cardInfo = new byte[30];byte[] data = new byte[10];if( mdev.PICC_Reader_Inventory(uid) <= 0 ) {showString("寻卡失败"); return;}showString("UID: " + mdev.arrayByteToString(uid, 8));if( mdev.PICC_Reader_SystemInfor(cardInfo) <= 0 ) {showString("获取卡信息失败"); return;}showString("卡信息: " + mdev.arrayByteToString(uid, 14));if( mdev.PICC_Reader_15693_Read((byte) 0, data) <= 0 ) {showString("读卡失败"); return;}showString("成功读取第0块数据: " + mdev.arrayByteToString(data, 4));}private void readMagCard() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}int nRt = -99;byte[] magData = new byte[255];byte[]   resp = new byte[160];int[] rlen = new int[2];int track = Integer.parseInt(etTrack.getText().toString().trim());int time = Integer.parseInt(etTime.getText().toString().trim());nRt = mdev.Rcard(time, track, rlen, resp);if( nRt != 0){showString("磁道" + track + "数据获取失败,ret=" + nRt); return;}showString("刷卡成功:" + new String( resp ));}private void readIDCard() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}llGroup.removeAllViews();String pkName=this.getPackageName();String show="";int nRt = mdev.PICC_ReadIDCardMsg(pkName);if( nRt != 0){showString("身份证读取失败,ret=" + nRt);return;}Bitmap bm1 = mdev.getBmpfile();ImageView iv=new ImageView(this);iv.setImageBitmap(bm1);llGroup.addView(iv);if(mdev.GetCardType() == 0){showString("居民身份证");show = "姓名: "+ mdev.getName() +'\n'+"性别: "+ mdev.getSex() +'\n'+"民族: "+ mdev.getNation() +"族"+'\n'+"出生日期: "+ mdev.getBirth() +'\n'+"住址: "+ mdev.getAddress() +'\n'+"身份证号码: "+ mdev.getIDNo() +'\n'+"签发机关: "+ mdev.getDepartment() +'\n'+"有效日期: "+  mdev.getEffectDate()  + "至" +  mdev.getExpireDate() +'\n';}if(mdev.GetCardType() == 1){showString("外国人永久居留证");show ="中文姓名: "+ mdev.getName() +'\n'+"英文姓名: "+ mdev.getEnName() +'\n'+"性别: "+ mdev.getSex() +'\n'+"国籍代码: "+ mdev.getNationalityCode() +'\n'+"永久居留证号码: "+ mdev.getIDNo() +'\n'+"出生日期: "+ mdev.getBirth() +'\n'+"有效日期: "+  mdev.getEffectDate()  + "至" +  mdev.getExpireDate() +'\n';}if(mdev.GetCardType() == 2){showString("港澳台居民居住证");show = "姓名: "+ mdev.getName() +'\n'+"性别: "+ mdev.getSex() +'\n'+"出生日期: "+ mdev.getBirth() +'\n'+"住址: "+ mdev.getAddress() +'\n'+"身份证号码: "+ mdev.getIDNo() +'\n'+"签发机关: "+ mdev.getDepartment() +'\n'+"通行证号码: "+ mdev.getTXZHM() +'\n'+"通行证签发次数: "+ mdev.getTXZQFCS() +'\n'+"有效日期: "+  mdev.getEffectDate()  + "至" +  mdev.getExpireDate() +'\n';}showString(show);}private void readIDCardUID() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}byte[]  uid     = new byte[20];byte    type    = (byte)0x41; //0x41 表示TypeA、M1if( mdev.PICC_Reader_ID_ReadUID(uid) != 0 ){showString("身份证寻卡失败"); return;}showString("UID:" + mdev.arrayByteToString(uid, 8));}private void getPassWord() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}int nRt = -99;byte[] passWord = new byte[20];byte[]    rlen = new byte[2];byte soundType = ((byte)spSound.getSelectedItemPosition());int time = Integer.parseInt(etTime.getText().toString().trim());if (soundType == 0x01) {soundType = 0x04;}else if (soundType == 0x02) {soundType = 0x0b;}else if (soundType == 0x03) {soundType = 0x0d;}else if (soundType == 0x04) {soundType = 0x0c;}else {soundType = 0x00;}nRt =mdev.ICC_Reader_GetInputPass((byte)time, soundType, (byte)1, rlen, passWord);if ( nRt == -9) {showString("语音播报失败");}if (nRt == 0) {showString("密码获取成功:" + new String(passWord));}else {/** 0:操作成功* -5:用户按取消键取消* -6:用户按确认键取消* -9:语音播报失败* -20:通信失败* */showString("密码获取失败:" + nRt);}}private void readSiCard() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}int nRt = -99;byte[] cardInfo = new byte[128];nRt = mdev.iReadSiCard((byte) 0x11, cardInfo);if (nRt != 0) {showString("读卡失败:"+ nRt); return;}try {showString("读卡成功:"+ new String(cardInfo,"gbk"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}private void readBankCard() {if (!mdev.isOpen()) {showString("设备未连接!"); return;}int nRt = -99;byte[] cardInfo = new byte[128];nRt = mdev.ireadBankCardNo((byte)0x01, cardInfo);if (nRt != 0) {nRt = mdev.ireadBankCardNo((byte)0x02, cardInfo);if (nRt != 0) {showString("读卡失败:" + nRt);return;}}try {showString("读卡成功:"+ new String(cardInfo,"gbk"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
}

东信EST-100系列身份证读卡器安卓开发包,Android Studio环境编译相关推荐

  1. ACR1251U-M1蓝牙NFC读卡器软件开发包包含Java/.NET/C++/Delphi代码案例

    ACR1251U-M1蓝牙NFC读卡器支持ISO 14443 A类和B类卡.MF系列卡.FeliCa卡.全部四种NFC标签,以及其它具有NFC功能的设备.另外它支持现场固件升级,还提供一个SAM(安全 ...

  2. stm32 vscode 编译_STM32开发之 VSCode+gcc环境编译

    STM32开发之 VSCode+gcc环境编译 一.程序安装 1.VSCode:https://code.visualstudio.com/Download 好用到爆的文本编辑器,配合强大的插件,使你 ...

  3. (Genymotion3.0.4安装系列)5-(补充版)Android Studio 3.5.2安装Genymotion插件

    关键词 Android Studio 3.5.2 Genymotion插件 genymotion插件 写在前面 由于一些原因,我换了Android Studio IDE的版本,选的是这个页面推荐的3. ...

  4. 【安卓作业】Android Studio记事本2

    [安卓作业]Android Studio记事本2 一.界面展示 二.功能介绍 添加备忘,修改备忘,删除备忘 三.项目结构 四.关键代码展示 (1)MainActivity public class M ...

  5. 【Py】基于Python的身份证读卡器二开全记录

    最近一个项目需要使用身份证读卡器进行数据采集,采集的身份证数据需要实时进入公司数据库,这就难免需要对设备进行二次开发.由于之前有过类似USB/串口盒子开发的经验,所以就接下了. #mermaid-sv ...

  6. MVC界面开发包Essential Studio for ASP.NET MVC发布2017 v3丨附下载

    2019独角兽企业重金招聘Python工程师标准>>> Essential Studio for ASP.NET MVC控件包是一个原生的MVC界面开发包,它包含了几乎所有企业级We ...

  7. 安卓 jni 开发 —— Android Studio 打包 so 的坑

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 安卓开发坑无限 我心依旧,不变 向前 jni 开发的坑 这两天要搞安卓下的串口读写,这块涉及到了 jni 开发,我找了两 ...

  8. 【安卓开发】android studio 学习入门篇

    以下内容转载自:https://blog.csdn.net/myosotis5/article/details/79208707 (为防止链接失效,特备份文章内容,侵删) 开发第一应用 可以开发属于自 ...

  9. 【Android 教程系列第 24 篇】在 Android Studio 中清理缓存的两种方式

    这是[Android 教程系列第 24 篇],如果觉得有用的话,欢迎关注专栏. 一:问题描述 昨天的安卓项目还好好的,今天早上打开的时候说我引入 R 文件还有其它的类出现了错误,然后点击任意一个类几乎 ...

最新文章

  1. Hibernate的generator属性之意义【转】
  2. 【Python】【函数式编程】
  3. SAP各种凭证的取消小结
  4. 青蛙跳台阶的问题——Fibonacci
  5. PGM学习之二 PGM模型的分类与简介
  6. 《幸福就在你身边》第一课、你有追求美好生活的权利【哈佛大学幸福课精华】...
  7. c语言代码表白_程序员教你表白:C/C++打造浪漫表白程序,找女朋友从现在开始...
  8. CB Loss:基于有效样本的类别不平衡损失
  9. 【笔记】生成函数与大背包问题
  10. AS3 的 2D向量类(Vector2D)
  11. ELK:ElasticSearch定期关闭和删除索引脚本
  12. 驻马店计算机招聘信息网,2017河南职称计算机考试报名:驻马店职称计算机报名入口...
  13. 敏捷开发模式下SDL实践
  14. 数据结构实验之大规模数据交并集
  15. navicate Premium 16连接阿里云云数据库RDS
  16. Linus Torvalds的最新电脑配置
  17. 零售行业如何进行活动前的准备工作
  18. 基于MATLAB BP神经网络的水果识别
  19. html图片轮播思路,css3如何实现轮播图?css3实现轮播图片的方法
  20. 【Python】数据分析——直方图、散点图、线性回归、多项式回归、拟合度

热门文章

  1. ThingsBoard架构简介
  2. 桥梁主动防撞预警系统平台介绍
  3. [apidoc]Apidoc-文档生成工具
  4. CSS实现水平垂直的几种方法
  5. “腾讯TLive-无缝接流”护航各大卫视跨年晚会完美收官
  6. C#中绘制三维模型的方法——面面拉伸
  7. 微信小程序连接百度地图API实现天气查询
  8. 隐式转换、IF判断、逻辑【与、或、非】、三目运算的用法(基础)
  9. MATLAB读json文件
  10. stats | 广义线性模型(三)——二元Logistic模型和Probit模型