使用Android NFC写入空白卡的指南

NFC(近场通信)是一种短距离无线技术,可以实现设备之间的数据传输。使用Android设备写入空白NFC卡(如NTAG系列),你可以将文本、链接、联系信息等数据存储在卡片上。在本文中,我们将讨论如何在Android应用中实现NFC写入功能,并提供示例代码。

准备工作

在开始写代码之前,你需要确保以下几个条件:

  1. 设备支持NFC:大部分现代Android手机都支持NFC。在设备的设置中确认NFC功能已开启。
  2. NFC卡:选择一张空白的NFC卡,确保支持NDEF格式写入(如NTAG213、NTAG215等)。

项目设置

首先,你需要在Android项目中添加必要的权限。在AndroidManifest.xml文件中添加以下内容:

<uses-permission android:name="android.permission.NFC"/>
<uses-feature android:name="android.hardware.nfc" android:required="true"/>

这确保应用能够请求NFC功能。

编写代码

在实现NFC写入功能时,我们需要创建一个用于识别NFC卡和写入数据的Activity示例。下面是一个示例代码片段:

MainActivity.java

import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private NfcAdapter nfcAdapter;
    private PendingIntent pendingIntent;

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

        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        pendingIntent = PendingIntent.getActivity(
                this, 0,
                new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 
                0);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter ndefFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndefFilter.addDataType("*/*"); // Handle all MIME types
        } catch (IntentFilter.MalformedMimeTypeException e) {
            e.printStackTrace();
        }
        IntentFilter[] intentFiltersArray = new IntentFilter[]{ndefFilter};
        String[][] techListsArray = new String[][]{new String[]{Ndef.class.getName()}};

        nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
    }

    @Override
    protected void onPause() {
        super.onPause();
        nfcAdapter.disableForegroundDispatch(this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
            Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            writeNdefMessage(tag, createNdefMessage("Hello, NFC!"));
        }
    }

    private NdefMessage createNdefMessage(String message) {
        NdefRecord ndefRecord = NdefRecord.createTextRecord("en", message);
        return new NdefMessage(new NdefRecord[]{ndefRecord});
    }

    private void writeNdefMessage(Tag tag, NdefMessage ndefMessage) {
        // 实现NDEF消息写入逻辑(略)
        Toast.makeText(this, "数据写入成功!", Toast.LENGTH_SHORT).show();
    }
}

代码解析

  • NfcAdapter:用于与NFC硬件进行交互。
  • PendingIntent:这是当检测到NFC标签时,启动应用的方式。
  • NdefMessageNdefRecord:用于创建可以写入NFC标签的数据结构。
  • onNewIntent():当NFC标签被识别时调用的方法。

NFC写入逻辑

writeNdefMessage方法中,你需要实现NDEF消息的写入逻辑。可以使用Ndef类进行NDEF消息的写入。

旅行图

以下是你写入NFC卡的旅行流程图。

journey
    title 使用Android NFC写入空白卡的旅行
    section 开始
      初始化项目: 5: 开始
      添加NFC权限: 4: 进行中
    section NFC功能实现
      创建NFC适配器: 4: 进行中
      编写发生事件: 5: 完成
      写入数据到NFC卡: 4: 完成
    section 结束
      测试应用: 5: 完成
      使用NFC功能: 5: 完成

总结

通过本文的介绍与代码示例,你已经了解了如何使用Android设备写入空白NFC卡。这项技术在智能名片、门禁系统、产品营销等许多场合都有广泛应用。希望你能在自己的项目中灵活运用这些知识,进一步探索NFC的更多可能性!