編輯:關於Android編程
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使用
2.最小SDK版本需要設置正確, API level 9只包含有限的tag支持;用API level 10來實現對tag的廣泛的讀寫支持。
3. uses-feature 元素定義:你的程序可以再android市場裡顯示有NFC硬件。
4. NFC intent filter告訴android系統你的activity能處理NFC數據,可以定義1個或多個intent filter。
Android SDK已經提供有進度條組件ProgressDialog組件,但用的時候我們會發現可能風格與我們應用的整體風格不太搭配,而且ProgressDialog的可
listview實現上拉加載以及下拉刷新的方式有很多。下面是我寫的一種自定義的布局,復用性也比較的強。首先就是繼承的listview的自定義view。 &nbs
狀態欄一體化及其帶來的軟鍵盤自適應問題應項目需求才開始了解狀態欄一體化的問題,作為一個android新手,之前從未接觸過。第一反應是網上搜索,不得不說網絡確實給我帶來很大
前言:前面幾篇文章介紹了補間動畫、逐幀動畫、屬性動畫,大部分都是針對View來實現的動畫,那麼該如何為了一個ViewGroup添加動畫呢?今天結合自定義ViewGroup