Android NFC API概述
Android中提供的與NFC相關的較高層的類都包含在android.nfc中,這個包中包含了用於與本地NFC適配器互動的類,用於代表已經識別的標籤的類以及用來使用NDEF(Nfc Data Exchange Format )格式的類。
這個包中主要包括了如下幾個類:
Show entriesSearch:
類名 |
描述 |
NfcManager |
NFC的一個進階管理類,用於枚舉出原生NFC適配器。由於大多數的裝置都只提供一個NFC適配器,因此在大多數情況下我們可以通過getDefaultAdapter(Context)這個靜態方法來得到本地的NFC適配器的引用。 |
NfcAdapter |
該類代表了本地的NFC適配器。它定義了如何將NFC標籤的資訊傳達給Activity的intent,並且提供了用於註冊前台標籤調度和前台的資料推送的方法。前台的基於NDEF的資料推送是目前Android僅提供的點到點支援方式。 |
NdefMessage and NdefRecord |
NDEF是由NFC論壇所定義的一種資料結構,它是為了高效率的在NFC標籤上儲存資料,例如文本、url或者其他的資料格式。NdefMessage是用於封裝需要傳輸或讀取的資料的容器。而每一個NdefMessage包含了0個或若干個NdefRecord。每個NDEF的記錄都包括一種有效類型的資料。在一條NDEF訊息中的第一個記錄的作用是向android的Activity調度一個標籤。 |
Tag |
該類代表了一個無源的NFC標籤。這種標籤可以來自於各種物體,比如通常所用的物理標籤、卡片、鑰匙卡或者也可以是一部可以模擬成NFC標籤的電話機。當NFC識別裝置發現了一個NFC標籤,系統就會建立一個NFC Tag對象並在對象中封裝一個intent。然後NFC的標籤調度系統將會負責將這些intent調度到適當的Activity中。可以通過 getTechList() 方法來決定使用適合該Tag對象的讀寫標準並且可以使用 android.nfc.tech包所提供的相關類來建立與此相關的 TagTechnology 對象。 |
Showing 1 to 4 of 4 entries
Android.nfc.tech包主要是包括了一些用於查詢特定標籤的特性和I/O操作的類。所有的這些類都需要實現TagTechnology介面,它們包括NfcA、NfcB、NfcF、NfcV、IsoDep、Ndef、NdefFormtable、MifareClassic、MifareUltralight這幾個類。
Android與NFC相關的類大致就是如上幾個,下面我們簡單的瞭解一下如何開始NFC的編程。
根據Android系統所遵循的許可權機制,我們需要在AndroidManifest.xml中對需要使用的許可權進行聲明,這樣在程式進行安裝時將會提示使用者該程式將會使用到哪些裝置,讓使用者來決定是否賦予應用程式相應的許可權,Android通過這樣的機制來提高系統的安全性。因此當我們在應用程式中需要使用到NFC硬體的時候,我們應當在AndroidManifest.xml中加上:
1 |
< uses-permission android:name = "android.permission.NFC" /> |
另外還需要聲明的是能夠支援應用程式的最低SDK版本,由於對NFC的支援是在API 10以後才比較完善,因此我們需要使用:
1 |
< uses-sdk android:minSdkVersion = "10" /> |
android的應用程式都是通過上傳到Android Market上供使用者下載的,我們可以通過加入如下一段聲明使我們的應用程式能夠被歸類到“支援NFC”的手機型號中:
12345678910111213141516 |
< uses-feature android:name = "android.hardware.nfc" android:required = "true" />1 < p style = "text-indent: 2em;" >最後,我們可以通過聲明一些intent filter來告訴作業系統該Activity可以處理NFC資料,有三種聲明的方式: 1 < intent-filter > < action android:name = "android.nfc.action.NDEF_DISCOVERED" /> < data android:mimeType = "mime/type" /> </ intent-filter > < intent-filter > < action android:name = "android.nfc.action.TECH_DISCOVERED" /> < meta-data android:name = "android.nfc.action.TECH_DISCOVERED" android:resource = "@xml/nfc_tech_filter.xml" /> </ intent-filter > < intent-filter > < action android:name = "android.nfc.action.TAG_DISCOVERED" /> </ intent-filter > |
這三種intent filter的聲明方式使用在特定的情況下。因此我們需要通過分析具體的應用程式來決定使用哪一種方式。具體怎麼選擇將在後面提到(標籤調度系統)。
這裡我們可以看一看一個完整的AndroidManifest.xml例子,取自於NFCDemo。
1234567891011121314151617181920212223242526272829 |
<? xml version = "1.0" encoding = "utf-8" ?> < manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.example.android.nfc" > < uses-permission android:name = "android.permission.NFC" /> < uses-permission android:name = "android.permission.CALL_PHONE" /> < application android:icon = "@drawable/icon" android:label = "@string/app_name" > < activity android:name = ".simulator.FakeTagsActivity" android:theme = "@android:style/Theme.NoTitleBar" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < activity android:name = "TagViewer" android:theme = "@android:style/Theme.NoTitleBar" > < intent-filter > < action android:name = "android.nfc.action.TAG_DISCOVERED" /> < category android:name = "android.intent.category.DEFAULT" /> </ intent-filter > </ activity > </ application > < uses-sdk android:minSdkVersion = "9" /> < uses-feature android:name = "android.hardware.nfc" android:required = "true" /> </ manifest > |