NFC三種模式之讀卡器模式
- 1.申請權限
- 2.過濾器的設定
- 3.接收卡片資訊
- 仿真卡模式
NFC的作業模式
讀卡器模式(Reader/writer mode)、仿真卡模式(Card Emulation Mode)、點對點模式(P2P mode),
讀卡器模式:讀卡器模式本質上就是通過NFC設備(例如支持NFC的Android手機)從帶有NFC芯片的標簽、貼紙、報紙、明信片、名片等媒介讀取資訊,或將資料寫到這些媒介中,
1.申請權限
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
2.過濾器的設定
過濾器的設定(三種模式):
第一種模式:優先級最高,先判斷是不是NDEF_DISCOVERED格式的資料,再判斷NDEF_DISCOVERED資料的型別,只有與過濾器中兩個條件都要求的一致,才會選擇滿足的activity 來處理,
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
第二種模式:優先級次于第一種模式,滿足TECH_DISCOVERED的設定,才會選擇滿足的activity 來處理,
<activity
...>
...
<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" />
</activity>
在res下新建xml檔案夾然后新建一個nfc_tech_filter.xml檔案,添加進你需要支持的標簽型別,
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- 可以處理所有Android支持的NFC型別 -->
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcV</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NdefFormatable</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.MifareClassic</tech>
</tech-list>
</resources>
第三種模式:優先級最低,只要滿足NFC規范中的任一種則都就會回應,
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
</intent-filter>
3.接收卡片資訊
private NfcAdapter mNfcAdapter;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mNfcAdapter = NfcAdapter.getDefaultAdapter(getContext());
}
//支持的標簽型別
private final int flag = NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS
| NfcAdapter.FLAG_READER_NFC_A
| NfcAdapter.FLAG_READER_NFC_B
| NfcAdapter.FLAG_READER_NFC_BARCODE
| NfcAdapter.FLAG_READER_NFC_F
| NfcAdapter.FLAG_READER_NFC_V;
@Override
public void onResume() {
super.onResume();
mNfcAdapter.enableReaderMode(getActivity(), new NfcAdapter.ReaderCallback() {
@Override
public void onTagDiscovered(Tag tag) {
//TODO 這里處理標簽資訊
}
}, flag, null);
}
@Override
public void onPause() {
super.onPause();
mNfcAdapter.disableReaderMode(getActivity());
}
各種標簽決議見 Android NFC之標簽決議
仿真卡模式
Android NFC之仿真卡模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312154.html
標籤:其他
上一篇:卸載抖音和微博的一天……
下一篇:控制pc端和手機端顯示不同的頁面
