NFC介紹
NFC是指“近場通訊”(Near Field Communication),它是一種短距離無線通信技術,允許設備在非接觸或極短距離內進行通信。NFC通常用于移動支付、門禁系統、智能標簽和其他物聯網應用中。
Android系統對NFC提供了廣泛的支持。通過NFC技術,Android設備可以與其他NFC設備進行通信,讀取NFC標簽上的信息,以及進行NFC支付等操作。
要在Android應用中使用NFC功能,需要在AndroidManifest.xml文件中聲明相應的權限和特性,并在應用代碼中使用NFC相關的API進行操作。同時,還需要確保設備支持NFC功能,并且用戶已經打開了NFC功能。
// 檢查設備是否支持NFC
NfcManager nfcManager = (NfcManager) getSystemService(Context.NFC_SERVICE);
NfcAdapter nfcAdapter = nfcManager.getDefaultAdapter();
if (nfcAdapter != null && nfcAdapter.isEnabled()) {
// NFC可用,執行相應的操作
} else {
// NFC不可用,給出相應的提示
}
在實際應用中,可以使用NFC相關的Intent過濾器來響應NFC標簽的讀取、寫入等操作,也可以使用NFC相關的API來進行更加靈活的操作。
Android系統對NFC提供了良好的支持,開發者可以充分利用這一功能為應用增加更多的交互和便利性。
NFC使用
如何在Android上使用NFC讀取卡片信息。首先,確保你的設備支持NFC功能。
(1) 添加必要的權限到AndroidManifest.xml文件中:
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
(2) 在你的Activity中注冊NFC相關的intent過濾器:
<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" />
(3) 創建一個NFC讀取的回調函數,并在onCreate方法中初始化NFC適配器:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
// 檢查設備是否支持NFC,并且NFC是否已經開啟
if (nfcAdapter != null && nfcAdapter.isEnabled()) {
// 在onCreate方法中注冊NFC事件處理器
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
IntentFilter[] filters = new IntentFilter[]{tagDetected};
// 創建一個PendingIntent對象,以便系統可以在檢測到NFC標簽時通知你的應用
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// 在onResume方法中啟用前臺調度
nfcAdapter.enableForegroundDispatch(this, pendingIntent, filters, null);
}
(4) 處理NFC標簽的讀取事件,并從標簽中讀取信息:
@Override
protected void onNewIntent(Intent intent) {
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
// 從標簽中讀取信息
}
}
(5) 在AndroidManifest.xml文件中創建一個nfc_tech_filter.xml文件,用于指定你要處理的NFC標簽類型:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
</resources>
通過以上步驟,你就可以在你的Android應用中使用NFC讀取卡片信息了。
使用NFC寫入器類來向NFC卡片寫入文本信息示例:
// 創建一個NFC寫入器類
public class NFCWriter {
private NfcAdapter nfcAdapter;
private PendingIntent pendingIntent;
private IntentFilter[] intentFilters;
private String[][] techLists;
public NFCWriter(Activity activity) {
nfcAdapter = NfcAdapter.getDefaultAdapter(activity);
Intent intent = new Intent(activity, activity.getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(activity, 0, intent, 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*");
} catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException("fAIl", e);
}
intentFilters = new IntentFilter[]{ndef};
techLists = new String[][]{new String[]{NfcF.class.getName()}};
}
// 寫入NDEF消息到NFC卡片
public void writeNdefMessage(Tag tag, NdefMessage message) {
try {
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
ndef.connect();
ndef.writeNdefMessage(message);
ndef.close();
} else {
NdefFormatable formatable = NdefFormatable.get(tag);
if (formatable != null) {
formatable.connect();
formatable.format(message);
formatable.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
總結
NFC(Near Field Communication)是一種無線技術,用于在短距離內進行數據傳輸和通信。在Android設備上,NFC可以用于實現多種功能,如支付、數據傳輸、門禁卡等。
(1) 硬件支持:確保設備支持NFC功能,并且用戶已經開啟了NFC功能。
(2) 權限聲明:在AndroidManifest.xml文件中聲明NFC權限。
<uses-permission android:name="android.permission.NFC" />
(3) 檢測NFC功能:在應用中檢測設備是否支持NFC功能,并且是否已經開啟。
(4) 創建NFC交互:創建NFC交互的相關操作,如讀取NFC標簽、寫入NFC標簽、處理NFC數據等。
(5) 處理NFC意圖:注冊NFC意圖過濾器,以便應用在檢測到NFC標簽時能夠響應相應的操作。
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="Application/*" />
</intent-filter>
(6) 處理NFC數據:當應用接收到NFC意圖時,處理NFC標簽中的數據,并進行相應的操作。
NFC開發涉及到硬件支持、權限聲明、NFC功能檢測、NFC交互創建、NFC意圖處理等步驟。通過合理的處理,可以實現豐富的NFC功能,為用戶提供更便利的體驗。