参考链接:
【NFC在android中的应用API】
Android 2.3 NFC简介
NFC (Near Field Communications) 是一套短距离的无线通信,通常距离是4厘米或更短。NFC工作频率是13.56M Hz,传输速率是106kbit/s 到848kbit/s. NFC总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。 与其他无线通信技术比较, 例如蓝牙和WiFi, NFC提供更低贷款和距离,并且低成本,不需要供电,不需要实现匹配,整个通信过程仅仅是短短的靠近一秒就能完成。 一个带有NFC支持的android设备通常是一个发起者。也可以作为NFC的读写设备。他将检测NFC tags并且打开一个Activity来处理. Android 2.3.3还有支持有限的P2P。 Tags分很多种,其中简单的只提供读写段,有的只能读。复杂的tags可以支持一些运算,加密来控制对tags里数据段的读写。甚至一些tags上有简单的操作系统,允许一些复杂的交互和可以执行一些代码。 Android 2.3加入了NFC(近场通讯)的支持The NFC API is available in the android.nfc package. The key classes are:
To use the NFC API, applications must request permission from the user by declaring <uses-permission android:name="android.permission.NFC"> in their manifest files. Additionally, developers can request filtering on Android Market, such that their applications are not discoverable to users whose devices do not support NFC. To request filtering, add <uses-feature android:name="android.hardware.nfc" android:required="true"> to the application's manifest. NFC的应用场景有很多,但Android 2.3目前API只提供了电子标签阅读器的功能。相信随着Android的版本升级,后续会增加很多应用场景和 API。 功能是少一点,但从无到有的第一步总是不容易的。从架构上看,至少有以下几部分的改动:
NFC的API在android.nfc的包中提供,这个包主要提供三个大类, 其中:NfcAdapter描述的就是手机中的NFC硬件,Android 2.3中可以暂时理解为电子标签扫描器。 电子标签和扫描器中的消息通过NdefMessage来表示,这个类很简单,只是封装了NdefRecord。 每个NdefMessage中可以包含多个NdefRecord,通过类NdefMessage的方法getRecords() 可以查询到消息的所有NdefRecord。NdefRecord才是信息的真正载体,正确理解这个类是理解NFC技术的一个重点。 NFC的技术规范[url]http://www.nfc-forum.org/specs/spec_list/[/url]是理解这个类不可或缺的资料。 应用程序的编程思路是:
|
Android NFC 编程方法:
nfc最低支持的版本 : <uses-sdk android:minSdkVersion = "10" />
market隐藏(不支持的设备将不能在market上找到该应用): <uses-feature android:name = "android.hardware.nfc" android:required = "true" />
nfc需要的权限: <uses-permission android:name="android.permission.NFC">
nfc需要过滤的action:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
code:
NfcAdapter mNfcAdapter = NfcManager.getDefaultAdapter(); //获取NFC硬件Adapter
//判断是否支持NFC硬件
if(mNfcAdpater==null) {
Toast.makeText(this,"this is not hava a nfc adapter",0).show();
} else {
//注册Nfc接收到数据(ndef)后回调的两个方法
mNfcAdapter.setNdefPushMessageCallback(this,this);
mNfcAdapter.setOnNdefPushCompleteCallback(this,this);
}
@Override public NdefMessage CreateNdefMessage(NfcEvent event){
NdefMessage msg = new NdefMessage(new NdefRecord[]{});
return msg;
}
@Override public void onNdefPushCompleteCallback(NfcEvent event){
}
//NFC中Tag 标识一个NFC目标,
当一个tag被检测到,一个tag对象将被创建并且封装到一个Intent里,然后NFC 发布系统将这个Intent用startActivity发送到注册了接受这种Intent的activity里。你可以用getTechList()方法来得到这个tag支持的技术细节和创建一个android.nfc.tech提供的相应的TagTechnology对象。