Android近場通訊 NFC基礎(四)

2021-06-25 13:43:44 字數 3918 閱讀 8726

**:

從intent中獲取資訊

如果因為nfc的intent而啟動乙個activity,那麼你就能夠從intent中獲取被掃瞄到的nfc標籤的相關資訊。根據被掃瞄到的標籤,intent物件能夠以下額外的資訊:

1.  extra_tag(必須的):它是乙個代表了被掃瞄到的標籤的

tag物件;

2.  extra_ndef_messages(可選):它是乙個解析來自標籤中的ndef訊息的陣列。這個附加資訊是強制在intent物件上的;

3.  }}

//process the msgs array}

此外,你還能夠從intent物件中獲得乙個tag物件,該物件包含了資料負載,並允許你列舉標籤的技術:

tagtag

=intent

.getparcelableextra

(nfcadapter

.extra_tag);

建立通用的

ndef

記錄型別

本節介紹如何建立通用的ndef記錄型別,以便幫助你向nfc標籤寫入或用android beam傳送資料。從android4.0(api level14)開始,可以用createuri()方法來幫助你自動的建立uri記錄。從android4.1(api level 16)開始,可以用createexternal()和createmime()方法來幫助你建立mime和外部型別的ndef記錄。使用這些輔助方法會盡可能的避免手動建立ndef記錄的錯誤。

本節還要介紹如何建立ndef記錄對應的intent過濾器。所有的這些寫入或傳送到nfc標籤的ndef記錄例子都應該是ndef訊息的第一條記錄。

tnf_absolute_uri

注意:我們推薦你使用rtd_uri型別,而不是tnf_absolute_uri,因為它更高效。

用下列方法建立乙個tnf_absolute_uri型別的ndef記錄:

ndefrecord urirecord = new ndefrecord(

ndefrecord.tnf_absolute_uri ,

"".getbytes(charset.forname("us-ascii")),

new byte[0], new byte[0]);

對應的intent過濾器如下:

android:host="developer.android.com"

android:pathprefix="/index.html" />

tnf_mime_media

使用下列方法建立tnf_mime_media型別的ndef記錄。

使用createmime()方法:

"beam me up, android".getbytes(charset.forname("us-ascii")));

手動的建立ndefrecord:

ndefrecord mimerecord = new ndefrecord(

ndefrecord.tnf_mime_media ,

new byte[0], "beam me up, android!".getbytes(charset.forname("us-ascii")));

對應的intent過濾器如下:

tnf_well_known

和rtd_text

用下列方法建立tnf_well_known型別的ndef記錄:

public ndefrecord createtextrecord(string payload, locale locale, boolean encodeinutf8)

對應的intent過濾器如下:

tnf_well_know

和rtd_uri

用下列方法建立tnf_well_known型別的ndef記錄。

使用createuri(string)方法:

ndefrecord

rtdurirecord1

=ndefrecord

.createuri

("");

使用

createuri(uri)

方法:

uri uri = new uri("");

ndefrecord rtdurirecord2 = ndefrecord.createuri(uri);

手動的建立ndefrecord:

對應的intent過濾器如下:

android:host="example.com"

android:pathprefix="" />

tnf_external_type

使用下列方法建立tnf_external_type型別的記錄。

使用createexternal()方法:

byte payload; //assign to your data

string type = "externaltype";

ndefrecord extrecord = ndefrecord.createexternal(domain, type, payload);

手動的建立ndefrecord:

byte payload;

...ndefrecord extrecord = new ndefrecord(

ndefrecord.tnf_external_type, "com.example:externaltype", new byte[0], payload);

對應的intent過濾器如下:

android:host="ext"

android:pathprefix="/com.example:externaltype"/>

使用更加一般化的tnf_external_type型別nfc部署,以便更好的支援android裝置和非android裝置。

注意:tnf_external_type型別的urn包含以下格式:

urn:nfc:ext:example.com.externaltype

,但是,nfc論壇的rtd規範宣告,urn的urn:nfc:ext:部分在ndef記錄中必須忽略。因此你需要提供的所有資訊是用「:」號把網域名稱(示例中的example.com)和型別(示例中的externaltype)分離開。在排程tnf_external_type型別的記錄時,android會把urn:nfc:ext:example.com:externaltype的urn轉換成vnd.android.nfc://ext/example.com:externaltype的uri,它是在示例中宣告的intent過濾器。

Android近場通訊 NFC基礎(二)

應用程式如何排程nfc標籤 當標籤排程系統完成對nfc標籤和它的標識資訊封裝的intent物件的建立時,它會把該intent物件傳送給感興趣的應用程式。如果有多個應用程式能夠處理該intent物件,就會顯示activity選擇器,讓使用者選擇activity。標籤排程系統定義了三種intent物件,...

Android近場通訊 高階NFC(一)

本文譯自 本文介紹一些高階的nfc專題,如多樣的nfc標籤技術 編寫nfc標籤 以及前台排程,前台排程允許在前台的應用程式優先排程intent事件,即使還有其他的過濾同樣的intent事件的應用程式存在。android所支援的nfc標籤技術 在使用nfc標籤和android裝置來進行工作的時候,使用...

NFC近場通訊,NFC列印開發

在進行nfc列印時我們先要了解印表機的屬性,本文中印表機以exp342為標準進行編寫整合技術文件。exp342的部分設定請參考該產品的使用說明書。我們在進行android整合開發時需要注意印表機的黑標感應點的位置,確定列印紙張黑標是否完全覆蓋印表機黑標感應點,如果未完全覆蓋將會導致列印紙不能走到你預...