AndroidNFC开发实例讲解_第1页
AndroidNFC开发实例讲解_第2页
AndroidNFC开发实例讲解_第3页
AndroidNFC开发实例讲解_第4页
AndroidNFC开发实例讲解_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AndroidNFC开发实例:学生卡数据读取2013-01-2313:35佚名cnblogs我要评论(0)字号:T|T七藏QNF8能现在越来越通用了,Google也为我们准备了详细的NFC开发文档,本文介绍了如何用AndroidNFC功能读取学生卡,获取里面的信息。AD2013大数据全球技术峰会低价抢票中使用硬件:GoogleNexusS,北京大学学生卡。(ps:笔者本想使用公交一卡通进行测试,发现手机不能正确识别)手机操作系统:AndroidICS4.04。开发时,笔者从GooglePlayStore上下载了NFCTagInfo软件进行对比学习。所以我们可以使用任意一张能被TagInfo软件

2、正确识别的卡做测试。在AndroidNFC应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器。Android对NFC的支持主要在android.nfc和android.nfc.tech两个包中。android.nfc包中主要类如下:NfcManager可以用来管理Android设备中指出的所有NFCAdapter,但由于大部分Android设备只支持一个NFCAdapter,所以一般直接调用getDefaultAapater来获取手机中的Adapter。NfcAdapter相当于一个NFC适配器,类似于电脑装了网络适配器才能上网,手机装了NfcAdapter才能

3、发起NFC通信。NDEF:NFCDataExchangeFormat,即NFC数据交换格式。NdefMessage和NdefRecordNDEF为NFCforum定义的数据格式。Tag代表一个被动式Tag对象,可以代表一个标签,卡片等。当Android设备检测到一个Tag时,会创建一个Tag对象,将其放在Intent对象,然后发送到相应的Activityandroid.nfc.tech中则定义了可以对Tag进行的读写操作的类,这些类按照其使用的技术类型可以分成不同的类如:NfcA,NfcB,NfcF,以及MifareClassic等。其中MifareClassic比较常见。在本次实例中,笔者使

4、用北京大学学生卡进行数据读取测试,学生卡的TAG类型为MifareClassicAndroidManifest.xml1.<manifestxmlns:android="http:2.package="org.reno"3.android:versionCode="1"4.android:versionName="1.0">5.<uses-permissionandroid:name="android.permission.NFC"/>6.<uses-sdkandroid:m

5、inSdkVersion="14"/>7.<uses-featureandroid:name="android.hardware.nfc"8.9.10.android:required<applicationandroid:iconandroid:label="true"/>="drawable/ic_launcher"="string/app_name"11.12.13.android:label="string/app_name"14.androi

6、d:launchMode="singleTop"<activityandroid:name="org.reno.Beam"15.16.<actionandroid:name="ent.action.MAIN"/>17.18.<categoryandroid:name="ent.category.LAUNCHER"<intent-filter>/>19.</intent-filter>20.<intent-filt

7、er>21.<actionandroid:name="android.nfc.action.TECHDISCOVERED"/>22.</intent-filter>23.<meta-data24.android:name="android.nfc.action.TECHDISCOVERED"25.android:resource="xml/nfc_tech_filter"/>26.27.</application>28.</manifest>res/xml/nfc_te

8、ch_filter.xml:1.<resourcesxmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"</activity>3.<tech>android.nfc.tech.MifareClassic</tech>4. </tech-list>5. </resources>当手机开启了NFC并且检测到一个TAG后,TAG分发系统会自动创建一个封装了NFCTAG信息的intent。如果多于一个应用程序能够处理这个intent的话,那么手机就会弹出一个框,让用户

9、选择处理该TAG的Activity。TAG分发系统定义了3中intent。按优先级从高到低排列为:NDEF_DISCOVERED,TECH_DISCOVERED,TAG_DISCOVERED当Android设备检测到有NFCTag靠近时,会根据Action申明的顺序给对应的Activity发送含NFC消息的Intent。此处我们使用的intent-filter的Action类型为TECH_DISCOVEREDM可以处理所有类型为ACTION_TECH_DISCOVERED使用的技术为nfc_tech_filter.xml文件中定义的类型的TAG详情可查看官方文档说明。下图为当手机检测到一个TA

10、G时,启用Activity的匹配过程res/layout/main.xml1. <?xmlversion="1.0"encoding="utf-8"?>2. <LinearLayoutxmlns:android'="fill_parent"="fill_parent"="vertical">3. android:layout_width4. android:layout_height5. android:orientation6.7. <ScrollView

11、8. android:id="+id/scrollView'9.android:layout_width="fill_parent"10.android:layout_height="fill_parent"11.android:background="android:drawable/edit_text"12.13.<TextView14.android:id="+id/promt"15. android:layout_width16. android:layout_height17. a

12、ndroid:scrollbars18.android:singleLine="fill_parent"="wrap_content"="vertical"="false"19.android:text="string/info"/>20.</ScrollView>21.22.</LinearLayout>定义了Activity的布局:只有一个带有滚动条的TextView用于显示从TAG中读取的信息res/values/strings.xml1. <?xmlv

13、ersion="1.0"encoding="utf-8"?>2. <resources>3. <stringname="app_name">NFC测试</string>4. <stringname="info">扫描中。</string>5. </resources>src/org/reno/Beam.java1. packageorg.reno;2.3. importandroid.app.Activity;4. importandro

14、id.content.Intent;5. importandroid.nfc.NfcAdapter;6. importandroid.nfc.Tag;7. importandroid.nfc.tech.MifareClassic;8. importandroid.os.Bundle;9. importandroid.widget.TextView;10.11. publicclassBeamextendsActivity12. NfcAdapternfcAdapter;13. TextViewpromt;14. Override15. publicvoidonCreate(Bundlesave

15、dInstanceState)16. super.onCreate(savedInstanceState);17. setContentView(R.layout.main);18. promt=(TextView)findViewById(R.mt);19. /获取默认的NFC控制器20. nfcAdapter=NfcAdapter.getDefaultAdapter(this);21. if(nfcAdapter=null)22. promt.setText("设备不支持NFC!");23. finish();24. return;25. 26. if(!n

16、fcAdapter.isEnabled()27. promt.setText("请在系统设置中先启用NFC功能!");28. finish();29. return;30. 31. 32.33. Override34. protectedvoidonResume()35. super.onResume();36. /得至ij是否检测至UACTION_TECH_DISCOVERED触发37. if(NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction()38. /处理该intent39. processI

17、ntent(getIntent();40. 41. 42. /字符序列转换为16进制字符串43. privateStringbytesToHexString(bytesrc)44. StringBuilderstringBuilder=newStringBuilder("0x");45. if(src=null|src.length<=0)46. returnnull;47. 48. charbuffer=newchar2;49. for(inti=0;i<src.length;i+)50. buffer0=Character.forDigit(srci>

18、>>4)&0x0F,16);51. buffer1=Character.forDigit(srci&0x0F,16);52. System.out.println(buffer);53. stringBuilder.append(buffer);54. 55. returnstringBuilder.toString();56. 57.58. /*59. *ParsestheNDEFMessagefromtheintentandprintstotheTextView60. */61. privatevoidprocessIntent(Intentintent)62.

19、 ./取出封装在intent中的TAG63. TagtagFromlntent=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);64. for(Stringtech:tagFromIntent.getTechList()65. System.out.println(tech);66. 67. booleanauth=false;68. /读取TAG69. MifareClassicmfc=MifareClassic.get(tagFromIntent);70. try71. StringmetaInfo=""72. /Enab

20、leI/OoperationstothetagfromthisTagTechnologyobject.73. mfc.connect();74. inttype=mfc.getType();/获取TAG的类型75. intsectorCount=mfc.getSectorCount();/获取TAG中包含的扇区数76. StringtypeS=""77. switch(type)78. caseMifareClassic.TYPECLASSIC:79. typeS="TYPE_CLASSIC"80. break;81. caseMifareClassic

21、.TYPE_PLUS:82. typeS="TYPE_PLUS"83. break;84. caseMifareClassic.TYPEPRO:85. typeS="TYPE_PRO"86. break;87. caseMifareClassic.TYPEUNKNOWN:88. typeS="TYPE_UNKNOWN"89. break;90. 共"+sectorCount+”个扇存储空间:"+mfc.getSize()91. metaInfo+="卡片类型:"+typeS+"n区n共

22、"92. +mfc.getBlockCount()+"个块n+"Bn"93. for(intj=0;j<sectorCount;j+)94. /AuthenticateasectorwithkeyA.95. auth=mfc.authenticateSectorWithKeyA(j,96. MifareClassic.KEY_DEFAULT);97. intbCount;98. intbIndex;99. if(auth)"Sector"+j+":验证成功n"100. metaInfo+=101./读取扇区中的块102. bCount=mfc.getBlockCountlnSector(j);103. bIndex=mfc.sectorToBlock(j);104

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论