怎么用NFC手机读卡片信息

news/2024/11/26 11:45:36/

下面是步骤:

1.获取管理权限:这个开发包里已经集成了,只需要调用一句代码就可以搞定,这个还是挺方便的。

        PermissionUtil.grantNeedPermission(this);

        2.打开NFC,并监听NFC事件,这段如果不懂,直接在网上搜安卓使用NFC就可以看到介绍


private NfcAdapter      mAdapter = null; // 定义NFC适配器
mAdapter = NfcAdapter.getDefaultAdapter(getApplicationContext());
pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);//.ACTION_TAG_DISCOVERED);
tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
mTechLists = new String[][]{new String[]{NfcB.class.getName()}, new String[]{NfcA.class.getName()}};
if (mAdapter != null && !mAdapter.isEnabled()) {Toast.makeText(this, "NFC尚未开启", Toast.LENGTH_SHORT).show();
}

        3.因为我的NFC事件是在子线程中的,所以new了一个handle

private static class MyHandler extends Handler {private final WeakReference<IDCardScannerActivity> mActivity;public MyHandler(IDCardScannerActivity activity) {mActivity = new WeakReference<IDCardScannerActivity>(activity);}@Overridepublic void handleMessage(Message msg) {System.out.println(msg);if (mActivity.get() == null) {return;}if (msg.what == 1002)throw new RuntimeException();else {try {mActivity.get().todo(msg);} catch (FileNotFoundException e) {e.printStackTrace();}}}}

        4.初始化类:

private OTGReadCardAPI  ReadCardAPI; // 定义读取类ReadCardAPI = new OTGReadCardAPI(getApplicationContext(), this, false); // 初始化类,第三个是回调地址,第三个直接传false就可以了// 设置服务器地址及端口
ArrayList<Serverinfo> twoCardServerlist = new ArrayList<Serverinfo>();
twoCardServerlist.add(new Serverinfo("id.yzfuture.cn", 8848));
ReadCardAPI.setServerInfo(twoCardServerlist, null, bTestServer);

        5.当手机检测到芯片靠近的时候,会回调onNewIntent,在这个里面直接 读取即可。但是为避免出现问题,我直接发送消息到 Handle里面处理。

@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);inintent = intent;mHandler.sendEmptyMessageDelayed(1, 0);}

6.在MyHandler 中会调到todo里面,这里面是具体的操作

public void todo(Message msg) throws FileNotFoundException {int tt = 0;m_szProcess = "";process.setText("");m_szAppKey = sharedPreferences.getString("AppKey", "");int     nnum = ReadCardAPI.GetAppKeyUseNum(m_szAppKey);if (nnum <= 0) nnum = 0;numtxt.setText(String.valueOf(nnum));if (m_szAppKey.isEmpty() || nnum<=0){regeditAppkey(true);}appkeyTxt.setText(m_szAppKey);if (!m_szAppKey.isEmpty() && nnum>0){if (msg.what == 1 || msg.what==1005){if (msg.what == 1005){inintent = null;}tt = ReadCardAPI.NfcReadCard(m_szAppKey, null, inintent, eCardType.eTwoGeneralCard, "", m_bAuthon);}if (m_bshow){userInfo.setText(m_szUserInfo);}if (tt == 41){if (m_berror){setdialog("读卡失败!" + ReadCardAPI.GetErrorInfo());}else{int     nerr = ReadCardAPI.GetErrorCode();if (nerr==-24997){setdialog("此设备没有解码权限!");}else setdialog("读卡失败!");}edtype.setText("");edname.setText("");edenname.setText("");edid.setText("");addTrue.setText("");sexTrue.setText("");mzTrue.setText("");jgTrue.setText("");birthTrue.setText("");yxqTrue.setText("");gjTrue.setText("");process.setText("");}if (tt == 90){if (ReadCardAPI.GetTwoCardInfo().arrTwoIdPhoto != null) {idimg.setBackground(new BitmapDrawable(Bytes2Bimap(ReadCardAPI.GetTwoCardInfo().arrTwoIdPhoto)));}if (ReadCardAPI.GetTwoCardInfo().szTwoType.equals("J")) {edtype.setText("港澳居民居住证");othernoTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoOtherNO);signTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoSignNum);} else {edtype.setText("居民二代证");othernoTrue.setText("");signTrue.setText("");}edid.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdNo.trim());edname.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdName.trim());addTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdAddress.trim());sexTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdSex.trim());mzTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdNation.trim() + "族");gjTrue.setText("中国");jgTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdSignedDepartment.trim());birthTrue.setText(ReadCardAPI.GetTwoCardInfo().szTwoIdBirthday.substring(0, 4) + "-" + ReadCardAPI.GetTwoCardInfo().szTwoIdBirthday.substring(4, 6) + "-" + ReadCardAPI.GetTwoCardInfo().szTwoIdBirthday.substring(6, 8));String startDate = ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodBegin.substring(0, 4) + "-" + ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodBegin.substring(4, 6) + "-" + ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodBegin.substring(6, 8);String endDate = "";int nlen = ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodEnd.indexOf("长期");if (nlen != -1) {endDate = "长期";} else {endDate = ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodEnd.substring(0, 4) + "-" + ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodEnd.substring(4, 6) + "-" + ReadCardAPI.GetTwoCardInfo().szTwoIdValidityPeriodEnd.substring(6, 8);}yxqTrue.setText(startDate + "~" + endDate);//process.setText("100");ReadCardAPI.release();}}}

到此就读取完了,当然 了第一次使用可以调用开发包自带的接口进行注册,注册也简单,只需要填写昵称和手机号,然后填入验证码就可以了。

         下面是我工程的完整代码链接,我打包全部上传到网盘里面了,直接 下载下来用android studio打开就可以用了。刚开始学习,有不好的地方请见谅。

https://www.yzfuture.cn/views/service/index.html?ap=download-center
https://github.com/yzfuture/yzfuture

由于CSDN积分规则,需要的下载分越来越贵,特地上传到了上面两个地方可以下载到windows/linux/android三个平台的SDK及demo和源码,免费送大家分享,欢迎一起学习探讨 


http://www.ppmy.cn/news/307365.html

相关文章

计算机操作系统应用题,操作系统应用题(解答)

操作系统应用题(解答) 个人收集整理 仅供参考学习 1 / 10 1.设有一台计算机,有两条I/O 通道,分别接一台卡片输入机和一台打印机.卡片机把一叠卡片逐一输入到缓冲区B1中,加工处理后在搬到缓冲区B2中,并在打印机上印出,问: ①系统要设几个进程来完成这个任务?各自地工作是…

SWP SIM卡片

武汉天喻 北京捷德 智能卡供应商法国雅斯拓&#xff08;Axalto&#xff09;&#xff1a;金雅拓&#xff08;Gemalto&#xff09;成立於2006 年&#xff0c;由雅斯拓&#xff08;Axalto&#xff09;和金普斯&#xff08;Gemplus&#xff09;兩家公司合併而成。http://www.axalt…

人机交互期末复习

人机交互期末复习 交互设计【交互设计简介】 交互设计的中心问题&#xff1a; 按照需要支持或扩充的用户活动&#xff0c;选择适当的方法和技术&#xff0c;以优化用户和系统、环境或产品之间的交互。 什么是交互设计&#xff1a; 设计支持人们日常工作和生活的交互式产品…

anki android 导入路径,3.1 导入卡片

> .apkg 文件(「牌组/记忆库」)在各系统的打开方法 [TOC2,4] 「牌组/记忆库」即「卡片」的集合&#xff0c;用于分类储存「卡片」。 试用材料请用百度云下载 >[warning] 点击下面的链接即可 > **注意**&#xff0c;这会导致转跳到本书之外的网站 > https://pan.bai…

android 卡片消息,安卓QNotified 支持xml卡片QQ消息 - 陌路人博客

xposed模块&#xff0c;完美支持太极&#xff0c;主要功能就是发送卡片消息&#xff0c;还有净化QQ&#xff0c;防撤回&#xff0c;群发消息等。 xml卡片消息发送方法注意看上面的图&#xff0c;长按没反应多半就是xml代码有问题&#xff0c;找xml代码可以加一些相关群&#xf…

移动端html模板卡片列表效果,移动手机Material Design风格信息卡片UI设计

这是一款非常时尚的移动手机Material Design风格信息卡片UI设计效果。该卡片设计效果中所有的卡片在点击或触摸之后,会以平滑过渡动画全屏展开。整个设计以扁平风格为主,非常时尚。 使用方法 HTML结构 该卡片UI的HTML结构分为2个部分。div.card__full是全屏的卡片,div.card_…

卡片机不行,浪费了美好的月色

本来想拍几张今年最大最圆的月亮放到这里&#xff0c;和众多笼罩在雾霭中的网友分享一下美丽的月色&#xff0c;谁知手上这部佳能太 破&#xff0c;拍出来的月亮将是黑暗中一个火球&#xff0c;一点儿也不是那么回事儿&#xff0c;所以&#xff0c;就不拿出来丢人了。等有钱了一…

穿孔卡片计算机相关知识整理

穿孔纸带是早期计算机的输入和输出设备&#xff0c;它将程序和数据转换 二进制数码&#xff1a;带孔为1&#xff0c;无孔为0&#xff0c;经过光电扫描输入电脑。 作为计算机周边设备而言&#xff0c;较更早期的 穿孔卡 [1] 有很大进步。被更先进的磁带&#xff08;1951年起作为…