📅  最后修改于: 2023-12-03 15:29:22.421000             🧑  作者: Mango
NFC(Near Field Communication)是一种短距离无线通信技术,可以用于数据交换和身份认证等。在Android系统中,NFC被广泛应用于移动支付、门禁卡等场景。
本指南将介绍如何在Android应用中使用NFC功能,包括启用NFC、读写NFC标签、处理NFC推送等。
要使用NFC功能,首先需要在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.NFC" />
此外,还需要在AndroidManifest.xml文件中声明应用支持NFC:
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
可以通过如下代码判断设备是否支持NFC:
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
// 设备不支持NFC
return;
}
要读写NFC标签,需要使用Android系统提供的NfcAdapter类。可以通过如下代码获取NfcAdapter实例:
NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter();
if (adapter == null) {
// 设备不支持NFC
return;
}
在获取到NfcAdapter实例后,可以使用以下步骤进行NFC标签读写:
Intent intent = new Intent(this, getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
adapter.enableForegroundDispatch(this, pendingIntent, null, null);
adapter.disableForegroundDispatch(this);
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
// 获取NFC标签ID
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
String tagIdStr = ByteArrayToHexString(tagId);
// 读取NFC标签内容
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
try {
ndef.connect();
NdefMessage ndefMessage = ndef.getNdefMessage();
if (ndefMessage != null) {
NdefRecord[] records = ndefMessage.getRecords();
for (NdefRecord record : records) {
byte[] payload = record.getPayload();
String text = new String(payload, Charset.forName("UTF-8"));
Log.d(TAG, "NFC Tag Content: " + text);
}
}
} catch (IOException | FormatException e) {
e.printStackTrace();
}
}
}
}
private String ByteArrayToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
上面的代码演示了如何获取NFC标签ID并读取NFC标签内容。
除了读写NFC标签,还可以使用NFC推送功能,在两个设备之间交换数据。实现NFC推送功能需要以下步骤:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
adapter.enableForegroundDispatch(this, pendingIntent, new IntentFilter[]{new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED)}, null);
adapter.disableForegroundDispatch(this);
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
// 读取NFC数据
Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMessages != null) {
NdefMessage[] messages = new NdefMessage[rawMessages.length];
for (int i = 0; i < rawMessages.length; i++) {
messages[i] = (NdefMessage) rawMessages[i];
}
NdefRecord[] records = messages[0].getRecords();
byte[] payload = records[0].getPayload();
String text = new String(payload, Charset.forName("UTF-8"));
Log.d(TAG, "Received NFC Push Message: " + text);
}
}
}
上面的代码演示了如何处理NFC推送事件并读取传输的数据。
本指南介绍了Android应用中如何使用NFC功能。通过学习NFC标签读写与NFC推送功能的实现方法,相信你已经能够灵活运用NFC技术了。