教你如何实现 Android NFC 卡

在如今的移动设备中,NFC(近场通信)技术已经成为一种常见的功能,广泛应用于支付、门禁、数据传输等场景。对于一名刚入行的小白来说,实现一个基本的 Android NFC 卡应用可能会让人感到困惑。下面的步骤将帮助你一步一步地实现一个简单的 NFC 卡应用。

整体流程

我们可以将实现 NFC 卡的过程分解为以下几个步骤:

步骤编号 步骤描述
1 创建 Android 项目
2 添加 NFC 权限
3 在布局文件中添加 UI
4 获取 NFCAdapter
5 处理 NFC 标签扫描
6 进行数据读取和处理

步骤详解

步骤 1: 创建 Android 项目

在 Android Studio 中创建新项目,选择 “Empty Activity”。

步骤 2: 添加 NFC 权限

AndroidManifest.xml 文件中添加 NFC 权限及特性:

<manifest xmlns:android="
    package="com.example.nfcapp">

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

    <application
        ...>
        <activity ...
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
    </application>
</manifest>

步骤 3: 在布局文件中添加 UI

res/layout/activity_main.xml 文件中添加一个简单的 TextView 来显示 NFC 数据:

<RelativeLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请靠近 NFC 卡" />
</RelativeLayout>

步骤 4: 获取 NFCAdapter

MainActivity.java 中,获取系统的 NFCAdapter:

import android.content.Context;
import android.nfc.NfcAdapter;

public class MainActivity extends AppCompatActivity {
    private NfcAdapter nfcAdapter;

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

        // 获取 NFC 适配器
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);

        // 检查设备是否支持 NFC
        if (nfcAdapter == null) {
            // 设备不支持NFC
            Toast.makeText(this, "设备不支持NFC", Toast.LENGTH_LONG).show();
            finish();
        }
    }
}

步骤 5: 处理 NFC 标签扫描

重写 onNewIntent 方法以处理扫描到的 NFC 标签:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // 检查 NFC 触摸事件
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (messages != null && messages.length > 0) {
            // 读取 NFC 数据
            processNfcMessage((NdefMessage) messages[0]);
        }
    }
}

// 处理 NFC 消息
private void processNfcMessage(NdefMessage ndefMessage) {
    NdefRecord[] records = ndefMessage.getRecords();
    if (records.length > 0) {
        // 获取文本数据
        String text = new String(records[0].getPayload());
        // 更新 UI
        ((TextView)findViewById(R.id.textView)).setText(text);
    }
}

步骤 6: 进行数据读取和处理

我们已经在上面的代码中完成了对 NFC 数据的读取。NFC的数据会解析到 TextView 上。

序列图

以下是 NFC 标签被扫描时的序列图:

sequenceDiagram
    participant User
    participant NFC_Card
    participant Smartphone
    participant NFC_Adapter

    User->>Smartphone: 靠近 NFC 卡
    Smartphone->>NFC_Adapter: 检测到 NFC 信号
    NFC_Adapter->>Smartphone: 触发 onNewIntent
    Smartphone->>Smartphone: 处理 NFC 消息
    Smartphone->>User: 显示 NFC 数据

类图

以下是涉及到 NFC 的主要类图:

classDiagram
    class MainActivity {
        +NfcAdapter nfcAdapter
        +onCreate(Bundle savedInstanceState)
        +onNewIntent(Intent intent)
        +processNfcMessage(NdefMessage ndefMessage)
    }

    class NfcAdapter {
        +getDefaultAdapter(Context context)
        +ENABLEForegroundDispatch()
    }

    class NdefMessage {
        +getRecords()
    }

    class NdefRecord {
        +getPayload()
    }

结尾

通过以上步骤,你应该可以成功创建一个基本的 Android NFC 卡应用。NFC 技术的实现虽然涉及到一些基本知识,但随着实践你会逐渐掌握更多的细节和高级功能。希望这篇文章能够为你提供一个良好的开端!继续学习,探索更多与 NFC 相关的应用功能,让你的开发技能更上一层楼。