android NFC 程式設計

來源:互聯網
上載者:User

標籤:android   style   blog   http   java   使用   

NFC簡介

NFC是Near Field Communication縮寫,即近距離無線通訊技術。由飛利浦公司和索尼公司共同開發的NFC是一種非

接觸式識別和互聯技術,可以在行動裝置、消費類電子產品、

PC 和智能控制項工具間進行近距離無線通訊。

13.56MHz頻率運行於20厘米距離內。其傳輸速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三種。目前近距離無線通訊已通

過成為ISO/IEC IS 18092國際標準、ECMA-340標準與ETSI 

TS 102 190標準。NFC採用主動和被動兩種通訊模式。

手機NFC支援三種工作模式:讀/寫標籤模式,點到點模式,類比卡片模式。


NFC的基本類

Android平台提供了兩個android.nfc 和android.nfc.tech包,裡面有API來實現NFC標籤的操作。

android.nfc包的主要有4個類:

NfcManager類:可以用來管理Android裝置中指出的所有NFC Adapter,但由於大部分Android裝置只支援一個NFC 

Adapter,可以直接使用getDefaultAapater方法來擷取系統支援的Adapter。

NfcAdapter類:本裝置的NFC adapter,可以定義Intent來請求將系統檢測到tags的提醒發送到你的Activity,並提供方

法去註冊前台tag提醒發布和前台NDEF推送。 

NdefMessage類:NDEF是NFC論壇定義的資料結構,用來有效存資料到標籤中,如文本,URL,和其他MIME類

型。一個NdefMessage扮演一個容器,這個容器存哪些發送和讀到的資料。一個NdefMessage對象包含0或多個

NdefRecord,每個NDEF record有一個類型,比如文本,URL,智慧型海報/廣告,或其他MIME資料。在

NDEFMessage裡的第一個NfcRecord的類型用來發送tag到一個android裝置上的activity。

Tag類:標示一個被動的NFC目標,比如tag,card,鑰匙掛扣,甚至是一個電話類比的的NFC卡。可提供對標籤的各

種操作方法。

android.nfc.tech包

android.nfc.tech包含那些對tag查詢屬性和進行I/O操作的類。這些類分別標示一個tag支援的不同的NFC技術標準。 

TagTechnology: 這個介面是下面所有tag technology類必須實現的。 

NfcA: 支援ISO 14443-3A 標準的屬性和I/O操作。

NfcB:NFC-B (ISO 14443-3B)的屬性和I/O操作。

NfcF:NFC-F (JIS 6319-4)的屬性和I/O操作。

NfcV: NFC-V (ISO 15693)的屬性和I/O操作。 

IsoDep:ISO-DEP (ISO 14443-4)的屬性和I/O操作。 

Ndef:對支援NDEF格式的標籤進行讀寫操作。

NdefFormatable: 對那些可以被格式化成NDEF格式的tag提供一個格式化的操作。 

MifareClassic: 如果android裝置支援MIFARE,提供對MIFARE Classic目標的屬性和I/O操作。 

MifareUltralight: 如果android裝置支援MIFARE,提供對MIFARE Ultralight目標的屬性和I/O操作。     


NFC編程基本步驟 

設定許可權

限制版本號碼

限制安裝的裝置

定義可接收Tag的Activity(可獲得標籤的相關資訊)

處理業務(根據便簽的具體業務)


NFC標籤過濾系統




NfcManager類詳解:

Use getSystemService(java.lang.String) with NFC_SERVICE to create an NfcManager, then call getDefaultAdapter() to obtain the NfcAdapter.

Alternately, you can just call the static helper getDefaultAdapter(android.content.Context).

public static NfcAdapter getDefaultAdapter (Context context):擷取手機中預設的NFC裝置,一般一部手機就只有一

個NFC模組,所有調用此方法即可。


NfcAdapter類詳解:

重要的常量(用於從Intent中擷取擷取資訊,這個Intent是NFC檢測到Tag後由系統發起的,由getIntent().getParcelableExtra(NfcAdapter.常量名);方法擷取相應對象):

EXTRA_TAG(必須的):它是一個代表了被掃描到的標籤的Tag對象;可通過

getParcelableExtra(NfcAdapter.EXTRA_TAG)獲得標籤對象。

EXTRA_NDEF_MESSAGES(可選):它是一個解析來自標籤中的NDEF訊息的數組。這個附加資訊是強制在Intent對

象上的;可通過 getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)獲得NDEF訊息。

EXTRA_ID(可選):標籤的低級ID。

以下三個常量用於對擷取的Intent中的Tag類型進行判斷:

ACTION_NDEF_DISCOVERED:NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())

ACTION_TAG_DISCOVERED:NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())

ACTION_TECH_DISCOVERED:NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())

重要方法:

public boolean isEnabled ():用於判斷當前NFC是否處於可用狀態

public void enableForegroundDispatch (Activity activity, PendingIntent intent, IntentFilter[] filters, String[][] 

techLists):Enable foreground dispatch to the given Activity.用於開啟前台調度(擁有最高的許可權),當這個Activity

位於前台(前台進程),即可調用這個方法開啟前台調度,一般位於onResume()回調方法中

public void disableForegroundDispatch (Activity activity):關閉前台調度,一般位於onStop()回調方法中


NdefMessage類詳解:

以下三個方法用於構造一個NDEF資料 結構的的Tag資料(用於在Activity與標籤之間的資料傳遞,讀取與寫入都要用

該對象進行封裝)

public NdefMessage (byte[] data)

public NdefMessage (NdefRecord record, NdefRecord... records)

public NdefMessage (NdefRecord[] records)

public byte[] toByteArray ():

public int getByteArrayLength ():

public NdefRecord[] getRecords ():Get the NDEF Records inside this NDEF Message.


NdefRecord類詳解:

以下兩個為構造方法:

public NdefRecord (short tnf, byte[] type, byte[] id, byte[] payload):

public NdefRecord (byte[] data):

以下四個方法擷取NdefRecord對象對應欄位的類型:

public byte[] getType ():

public short getTnf ():

public byte[] getPayload ():

public byte[] getId ():


Tag類詳解:

public String[] getTechList ():Get the technologies available in this tag, as fully qualified class names.


Ndef類詳解:

該類用於對NDEF格式的Tag進行讀寫操作的封裝,不同的Tag用不同的類封裝,都在android.nfc.tech包中

public static Ndef get (Tag tag):Get an instance of Ndef for the given tag.構建對象

public void connect ():Enable I/O operations to the tag from this TagTechnology object.,開啟I/O操作

public boolean isWritable ():Determine if the tag is writable.判斷是否可寫

public int getMaxSize ():Get the maximum NDEF message size in bytes.

public void writeNdefMessage (NdefMessage msg):Overwrite the NdefMessage on this tag.向這個Tag寫入資料

public String getType ():Get the NDEF tag type.

public boolean makeReadOnly ():Make a tag read-only.


NdefFormatable類詳解:

用於將其他類型的格式格式化成Ndef格式

public static NdefFormatable get (Tag tag):Get an instance of NdefFormatable for the given tag.Returns null if 

NdefFormatable was not enumerated in getTechList(). This indicates the tag is not NDEF formatable by this Android 

device.

public void connect ():Enable I/O operations to the tag from this TagTechnology object.

public void format (NdefMessage firstMessage):Format a tag as NDEF, and write a NdefMessage.


NFC前台調度 

將處理NFC標籤的權利交給某個視窗(優先順序最高)

1、在onCreate()中獲得NfcAdapter對象;

2、建立與該Activity關聯的PendingIntent;

3、指定一個用於處理NFC標籤的視窗;通常會在onResume()方法中採用nfcAdapter.enableForegroundDispatch()

來實現;

4、禁止視窗處理NFC標籤。採用nfcAdapter.disableForegroundDispatch()來實現。


使用權限設定

在你能訪問一個裝置的NFC硬體和正確的處理NFC的Intent之前,需要在AndroidManifest.xml中先聲明下面的項:

1.NFC使用 <uses-permission> 元素來訪問NFC硬體: 

  <uses-permission android:name=“android.permission.NFC” />

2.最小SDK版本需要設定正確, API level 9隻包含有限的tag支援;用API level 10來實現對tag的廣泛的讀寫支援。 

  <uses-sdk android:minSdkVersion=“10”/>

3. uses-feature 元素定義:你的程式可以再android市場裡顯示有NFC硬體。 

<uses-feature android:name=“android.hardware.nfc” android:required=“true” />

4. NFC intent filter告訴android系統你的activity能處理NFC資料,可以定義1個或多個intent filter。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.