教你如何实现 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 相关的应用功能,让你的开发技能更上一层楼。