Android NFC之读卡器模式
Posted weixin_44053702
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android NFC之读卡器模式相关的知识,希望对你有一定的参考价值。
NFC的工作模式
读卡器模式(Reader/writer mode)、仿真卡模式(Card Emulation Mode)、点对点模式(P2P mode)。
读卡器模式:读卡器模式本质上就是通过NFC设备(例如支持NFC的android手机)从带有NFC芯片的标签、贴纸、报纸、明信片、名片等媒介读取信息,或将数据写到这些媒介中。
1.申请权限
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
2.过滤器的设置
过滤器的设置(三种模式):
第一种模式:优先级最高。先判断是不是NDEF_DISCOVERED格式的数据,再判断NDEF_DISCOVERED数据的类型,只有与过滤器中两个条件都要求的一致,才会选择满足的activity 来处理。
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
第二种模式:优先级次于第一种模式。满足TECH_DISCOVERED的设置,才会选择满足的activity 来处理。
<activity
...>
...
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
在res下新建xml文件夹然后新建一个nfc_tech_filter.xml文件,添加进你需要支持的标签类型。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- 可以处理所有Android支持的NFC类型 -->
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcV</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NdefFormatable</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.MifareClassic</tech>
</tech-list>
</resources>
第三种模式:优先级最低。只要满足NFC规范中的任一种则都就会响应。
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
</intent-filter>
3.接收卡片信息
private NfcAdapter mNfcAdapter;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mNfcAdapter = NfcAdapter.getDefaultAdapter(getContext());
}
//支持的标签类型
private final int flag = NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS
| NfcAdapter.FLAG_READER_NFC_A
| NfcAdapter.FLAG_READER_NFC_B
| NfcAdapter.FLAG_READER_NFC_BARCODE
| NfcAdapter.FLAG_READER_NFC_F
| NfcAdapter.FLAG_READER_NFC_V;
@Override
public void onResume() {
super.onResume();
mNfcAdapter.enableReaderMode(getActivity(), new NfcAdapter.ReaderCallback() {
@Override
public void onTagDiscovered(Tag tag) {
//TODO 这里处理标签信息
}
}, flag, null);
}
@Override
public void onPause() {
super.onPause();
mNfcAdapter.disableReaderMode(getActivity());
}
各种标签解析见 Android NFC之标签解析
仿真卡模式
以上是关于Android NFC之读卡器模式的主要内容,如果未能解决你的问题,请参考以下文章
Kevin Learn Android-->NFC 技术解析