NFC在Android中的应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFC在Android中的应用相关的知识,希望对你有一定的参考价值。
参考技术A 什么是NFC?Google一大坨,百度一大坨,我就不讲了,这里我只讨论技术细节。首先我们先讨论一下这样的一个问题,当我们把NFC标签靠近手机,并且手机感应后,我们通过什么方式能得到NFC标签信息呢?答案就是通过Intent的方式来获取。现在的需求是我想在启动一个Activity后通过读NFC的方式得到里面的信息。下面我来介绍具体做法。
通过分析需求得知,我们需要前台调度系统机制,这种机制允许Activity拦截Intent对象。
1.获取NfcAdapter
nfcAdapter= NfcAdapter.getDefaultAdapter(this);
2.构造PendingInent对象封装NFC标签信息
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
3.声明Intent对象的过滤器
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try ndef.addDataType("*/*"); catch (IntentFilter.MalformedMimeTypeException e) throw new RuntimeException("fail", e);
4建立一个处理NFC标签技术的数组
5.这是最核心最重要的一步了,我们需要在Activity的onResume方法中调用nfcadapter的enableForegroundDispatch方法把上面的变量作为参数传递进来,
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,mTechLists);
一旦NFC标签接触到手机,这个方法就会被激活。
6.最后我们需要在onNewIntent方法中处理Intent回调给我们的信息。
Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage mNdefMsg = (NdefMessage) rawArray[0];//得到NdefMessage NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];//得到NdefRecord
是否可以在 Android 上读取与第三方应用程序的 NFC 通信?
【中文标题】是否可以在 Android 上读取与第三方应用程序的 NFC 通信?【英文标题】:Is it possible to read NFC communication with a third party app on Android? 【发布时间】:2021-02-15 01:13:02 【问题描述】:我是一名爱好 Android 应用程序开发人员。带着这个问题,我想看看是否值得学习 NFC。
我的目标是编写一个应用程序,该应用程序可以跟踪我的银行卡付款,这些付款是通过我的手机在银行卡终端上通过 NFC 支付的。
在建议的标题中,我的问题是,我是否可以“嗅探”我的银行应用程序和银行卡终端的 NFC 流量并获取有关付款的一些信息。 进一步的问题,如果这不可能,是否可以直接与我的银行应用程序通信并获取信息?
【问题讨论】:
【参考方案1】:简短的回答是“不”,您无法嗅探 NFC 流量。
通常对于银行卡,它们被加载到主机操作系统无法访问的 NFC 控制器的安全元件中。
见https://developer.android.com/guide/topics/connectivity/nfc/hce上的描述
安全元件本身执行与 NFC 终端的通信,交易完全不涉及 Android 应用程序。交易完成后,Android应用程序可以直接查询安全元件以获取交易状态并通知用户。
因此,手机上安装的任何银行应用都与基于 NFC 的交易无关。
尽管您的银行应用程序可以做到这一点,但您也许可以在交易后查询安全元素。
【讨论】:
以上是关于NFC在Android中的应用的主要内容,如果未能解决你的问题,请参考以下文章
HostApduService (NFC) 中的 Android 多线程