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之仿真卡模式

以上是关于Android NFC之读卡器模式的主要内容,如果未能解决你的问题,请参考以下文章

Kevin Learn Android-->NFC 技术解析

nfc-a协议的时序要求

在android平板中如何进行NFC通信,就是通过rfid读卡器连接到平板的USB后,读取的内容显示到平板上

NFC驱动调试

NFC的读写实现--高上

NFC读写器是啥