Android NFC 写卡

引言

近年来,随着移动支付的普及和NFC(Near Field Communication)技术的发展,越来越多的Android应用开始使用NFC模块进行读写操作。NFC技术可以让手机与其他设备(如POS机、智能门锁等)进行近距离无线通信,使得移动支付、门禁系统、公交卡等功能变得更加便捷。本文将介绍如何在Android中使用NFC技术进行写卡操作,并提供相应的代码示例。

NFC 基础知识

NFC是一种短距离高频无线通信技术,工作频率为13.56MHz。它可以实现两个设备之间的双向通信,并支持主动和被动模式。在NFC中,有一个设备担任“读卡器”的角色,负责发起通信和读取数据;另一个设备则是“卡片”的角色,负责被动响应和提供数据。

Android设备通常具有NFC芯片,可以作为读卡器来与其他设备进行通信。为了使用NFC功能,我们需要在AndroidManifest.xml文件中声明相应的权限和Intent过滤器。

NFC 写卡流程

要使用NFC进行写卡操作,我们需要遵循以下流程:

  1. 检测NFC设备的可用性:在代码中使用NfcAdapter类来检测设备是否支持NFC功能。
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
    // 设备不支持NFC
    return;
}
  1. 设置NFC回调接口:在Activity中实现NfcAdapter.ReaderCallback接口,以便接收NFC事件。
public class MainActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback {
    ...
}
  1. 启用NFC感应器:在Activity的onResume()方法中启用NFC感应器。
@Override
protected void onResume() {
    super.onResume();
    nfcAdapter.enableReaderMode(this, this, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, null);
}
  1. 处理NFC事件:在实现的onTagDiscovered()方法中处理NFC事件,进行写卡操作。
@Override
public void onTagDiscovered(Tag tag) {
    // 获取NFC卡片实例
    NfcCard nfcCard = NfcCard.get(tag);

    // 进行写卡操作
    nfcCard.writeData("Hello, NFC!");

    // 关闭NFC感应器
    nfcAdapter.disableReaderMode(this);
}
  1. 解析NFC卡片数据:实现NfcCard类来封装NFC卡片的读写操作。
public class NfcCard {
    private static final String TAG = "NfcCard";

    private Tag tag;

    public static NfcCard get(Tag tag) {
        return new NfcCard(tag);
    }

    private NfcCard(Tag tag) {
        this.tag = tag;
    }

    public void writeData(String data) {
        // 写入数据到NFC卡片
        ...
    }
}
  1. 配置NFC权限和Intent过滤器:在AndroidManifest.xml文件中添加NFC权限和Intent过滤器。
<uses-permission android:name="android.permission.NFC" />

<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>

示例代码

下面是一个简单的示例代码,演示了如何使用NFC进行写卡操作:

public class MainActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback {
    private NfcAdapter nfcAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        if (nfcAdapter == null) {
            // 设备不支持NFC
            return;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        nfcAdapter.enableReaderMode(this, this, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG