




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、大家學(xué)習(xí)android開發(fā)建議首選android開發(fā)文檔,該文檔在你下載的sdk中,路徑:/sdk/docs/index.html目前NFC應(yīng)用的大的框架上的理解:我使用的API LEVEL是19,支持的API有三個(gè):android.nfc,android.nfc.cardemulator,android.nfc.techNFC在手機(jī)上的應(yīng)用大體分為兩類:讀卡器和卡android.nfc.cardemulator接口是為NFC作為卡應(yīng)用提供的接口,在較低版本的API上是沒有的android.nfc.tech,android.nfc接口是為NFC作為讀卡器應(yīng)用提供的接口首先說作為卡,nfc有兩種
2、實(shí)現(xiàn)方式,一個(gè)是使用NFC芯片作為卡,另一個(gè)是使用SIM作為卡Figure 1. NFC card emulation with a secure element.至于從讀卡器發(fā)送的指令到底是傳遞到NFC芯片還是SIM由NFC Controler控制,圖中Secure Element是指SIM,Host-CPU指NFC芯片android提供HostApduService用于NFC芯片,OffHostApduService用于SIM芯片,傳遞方向在res/xml文件中通過AID來控制ps:Host-Based Card Emulator 簡(jiǎn)稱為HCE代碼實(shí)現(xiàn):AndroidManifest.xm
3、l 中 配置service,因?yàn)樽鳛榭▽?shí)現(xiàn)的話,NFC功能是作為service存在的 res/xml/apduservice.xml 中配置service響應(yīng)的AID 配置文件完成后編寫service的處理方法:NFCService需要繼承HostApduService,如果需要與Activity通信,建議采用廣播方式也可以自己實(shí)現(xiàn)觀察者模式,只是這樣就需要持有Activity的引用,感覺不太好NFCService.javapublic class NFCService extends HostApduService private Intent intent = new Intent(mun
4、ication.RECEIVER); Override public void onCreate() /啟動(dòng)Acivity Intent i = new Intent(); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);/需要啟動(dòng)的Activity不是當(dāng)前Activity的時(shí)候需要用FLAG_ACTIVITY_NEW_TASK i.setAction(com.apdu.nfc); getApplication().startActivity(i); Toast.makeText(getApplicationContext(), Service啟動(dòng), Toa
5、st.LENGTH_LONG).show(); Override public byte processCommandApdu(byte commandApdu, Bundle extras) /當(dāng)注冊(cè)的AID被選中后,后續(xù)指令被分發(fā)到這個(gè)處理函數(shù)中 byte sw = new byte(byte)0x90,(byte)0x00; byte response = new byte5; if (commandApdu0=(byte)0x00 &commandApdu1=(byte)0xA4& commandApdu2=(byte)0x04 & commandApdu4=(byte)0x07& c
6、ommandApdu5=(byte)0xF0) return sw; else /apdu處理邏輯 switch(commandApdu1) case (byte)0xA8: break; case (byte)0xAE: break; default: return sw; intent.putExtra(command, commandApdu); intent.putExtra(response, response); sendBroadcast(intent); /利用廣播與Activity通信 return response; /SW值需要包含在response中 Override
7、public void onDeactivated(int reason) if (reason=HostApduService.DEACTIVATION_DESELECTED) Toast.makeText(getApplicationContext(), 已選擇其它應(yīng)用, Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(), 連接斷開, Toast.LENGTH_LONG).show(); Override public void onDestroy() Toast.makeText(getAppli
8、cationContext(), Service關(guān)閉, Toast.LENGTH_LONG).show(); super.onDestroy(); 框架搭建好剩余的事情就很簡(jiǎn)單了,apdu的處理邏輯在processCommandApdu方法中實(shí)現(xiàn)即可以上是Host-CPU方式的實(shí)現(xiàn),SIM方式,API介紹中說該方式?jīng)]有提供可供操作的API,也就是說Android不會(huì)監(jiān)聽SIM卡與讀卡器之間的通信所以NFCOffService 只需要實(shí)現(xiàn)onBind接口,這樣綁定該Service的Activity可以對(duì)NFCOffService進(jìn)行有限操作public class NFCOffService e
9、xtends OffHostApduService Override public IBinder onBind(Intent intent) / TODO Auto-generated method stub return null; 上面沒有提到的就是,如果你需要使用NFC,需要在Manifest中申請(qǐng)NFC權(quán)限: 現(xiàn)在來說說NFC芯片作為讀卡器的應(yīng)用場(chǎng)景以及實(shí)現(xiàn)android.nfc.tech,android.nfc接口是為NFC作為讀卡器應(yīng)用提供的接口接口定義了三種Action Tags:ACTION_NDEF_DISCOVERED,ACTION_TECH_DISCOVERED,ACT
10、ION_TAG_DISCOVERED。當(dāng)你在Manifest文件中將Activity的action-filter設(shè)置為這三個(gè)Tag中的一種或幾種時(shí),NFC響應(yīng)事件會(huì)按照如圖流程處理我的理解是ACTION_NDEF_DISCOVERED 是用于兩臺(tái)NFC手機(jī)之間傳輸文件的ACTION_TECH_DISCOVERED,ACTION_TAG_DISCOVERED才是用于NFC與卡進(jìn)行通訊的所以開發(fā)第一步是在Manifest中配置你的Action: TECH_DISCOVERED還需要配置meta-data,meta-data的作用相當(dāng)于補(bǔ)充說明或者一些配置信息nfc_tech_filter.xml
11、android.nfc.tech.IsoDep android.nfc.tech.NfcA android.nfc.tech.NfcB android.nfc.tech.NfcF android.nfc.tech.NfcV android.nfc.tech.Ndef android.nfc.tech.NdefFormatable android.nfc.tech.MifareClassic android.nfc.tech.MifareUltralight 當(dāng)然API中說明你可以將多個(gè)tech寫在一個(gè)tech-list中,我做了嘗試,這樣做會(huì)引出一個(gè)問題,在程序未啟動(dòng)的情況下當(dāng)手機(jī)刷卡時(shí)不會(huì)自
12、動(dòng)打開程序如果想要自動(dòng)打開需要按照上面這種寫法,tech的個(gè)數(shù)可以根據(jù)你想要支持的卡類型進(jìn)行調(diào)整配置完成后,可以開始編寫自己的Activity的java代碼了在onCreate方法中,需要獲取NfcAdapter的引用,從名字可以看出這是一個(gè)適配器 NfcAdapter nfcAdapter; PendingIntent pendingIntent; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.pos
13、_main); dc = (Button)findViewById(R.id.button4DC); ecc = (Button)findViewById(R.id.button4ECC); qpboc = (Button)findViewById(R.id.button4QPBOC); logWindow=(TextView)findViewById(Rmunication4Financy); nfcAdapter=NfcAdapter.getDefaultAdapter(this); pendingIntent = PendingIntent.getActivity( this, 0, n
14、ew Intent(this, getClass().addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); onNewIntent(getIntent(); 這里使用PendingIntent,該Intent與普通的Intent不同的是它是有一個(gè)延遲啟動(dòng)的功能,它啟動(dòng)時(shí)會(huì)回調(diào)onNewIntent函數(shù),這樣能夠?qū)崿F(xiàn)NFC與Activity的交互pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass().addFlags(Intent.FLAG_ACTIVIT
15、Y_SINGLE_TOP), 0);的含義是將Intent傳遞給this Activity在onPause與onResume中需要添加代碼 public void onPause() super.onPause(); nfcAdapter.disableForegroundDispatch(this); public void onResume() super.onResume(); nfcAdapter.enableForegroundDispatch(this, pendingIntent, FILTERS, TECHLISTS); enableForegroundDispatch的作用是
16、,當(dāng)NFC事件發(fā)生時(shí)如果當(dāng)前Activity不是注冊(cè)了NFC action-filter的Activity,手機(jī)會(huì)顯示注冊(cè)了NFC事件的Activity供用戶選擇如果當(dāng)前Activity注冊(cè)了NFC action 則將事件優(yōu)先交由當(dāng)前Activity處理。onNewIntent實(shí)現(xiàn): Override public void onNewIntent(Intent intent) Parcelable p = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); if (p=null) return; Tag nfcTag = (Tag)p; fina
17、l IsoDep isodep = IsoDep.get(nfcTag);/ final NfcA isodep = NfcA.get(nfcTag); final byte cmd = (byte) 0x00, / CLA Class (byte) 0xB4, / INS Instruction (byte) 0x04, / P1 Parameter 1 (byte) 0x00, / P2 Parameter 2 (byte) 0x00, / Le ; try isodep.connect(); byte reaponse=null; logWindow.append(00B4040000+
18、n); try reaponse = isodep.getHistoricalBytes(); logWindow.append(Util.bytes2HexString(reaponse)+n); reaponse =isodep.transceive(cmd); logWindow.append(Util.bytes2HexString(reaponse)+n); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IOException e1) / TODO Auto-generated
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度競(jìng)業(yè)限制合同在體育產(chǎn)業(yè)的合同應(yīng)用
- 第十七章第一節(jié)《電流與電壓和電阻的關(guān)系》教學(xué)設(shè)計(jì)-2024-2025學(xué)年人教版物理九年級(jí)上學(xué)期
- 2025年度網(wǎng)絡(luò)安全防護(hù)咨詢股權(quán)合作協(xié)議
- 2025年衛(wèi)浴三件套項(xiàng)目可行性研究報(bào)告
- 二零二五年度股東合伙出資協(xié)議書:現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)投資合作協(xié)議
- 三年級(jí)數(shù)學(xué)100以內(nèi)整數(shù)除法計(jì)算題綜合作業(yè)例題帶答案
- 2025年中國(guó)圣誕裝飾蘋果行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 全國(guó)蘇科版初中信息技術(shù)七年級(jí)上冊(cè)第三單元第1節(jié)《文本加工工具》教學(xué)設(shè)計(jì)
- 2025年免疫分析儀器及試劑項(xiàng)目合作計(jì)劃書
- Unit4 I have a pen pal PartA let's learn(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版英語六年級(jí)上冊(cè)
- 兒童哮喘的防治與治療
- 新時(shí)代中國(guó)特色社會(huì)主義理論與實(shí)踐2024版研究生教材課件全集6章
- 學(xué)校安全教師培訓(xùn)
- 《由宋城集團(tuán)的成功》課件
- (2024)湖北省公務(wù)員考試《行測(cè)》真題及答案解析
- 信息經(jīng)濟(jì)學(xué) 課件(1至6章)
- 金融警示教育案例
- 中小學(xué)校食品安全與膳食經(jīng)費(fèi)管理工作指引
- 海邁工程量清單計(jì)價(jià)軟件使用說明書-20220226100603
- 2024落實(shí)意識(shí)形態(tài)責(zé)任清單及風(fēng)險(xiǎn)點(diǎn)臺(tái)賬
- 高校排球教案全集-專項(xiàng)課
評(píng)論
0/150
提交評(píng)論