NFC
 NFC即近场通讯功能,NFC是Near Field Communication缩写,即近距离无线通讯技术。由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。NFC 提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC技术允许电子设备之间进行非接触式点对点数据传输,在十厘米(3.9英吋)内,交换数据,其传输速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三种。NFC工作模式有卡模式(Card emulation)、点对点模式(P2P mode)和读卡器模式(Reader/writer mode)。NFC和蓝牙都是短程通信技术,而且都被集成到移动电话。但NFC不需要复杂的设置程序。NFC也可以简化蓝牙连接。NFC 略胜 Bluetooth 的地方在于设置程序较短,但无法达到Blutooth的低功率。NFC的最大数据传输量是 424 kbit/s 远小于 Bluetooth V2.1 (2.1 Mbit/s)。虽然NFC在传输速度与距离比不上BlueTooth,但是NFC技术不需要电源,对于移动电话或是行动消费性电子产品来说,NFC的使用比较方便。

  NFC还优于红外和蓝牙传输方式。作为一种面向消费者的交易机制,NFC比红外更快、更可靠而且简单得多,不用向红外那样必须严格的对齐才能传输数据。与蓝牙相比,NFC面向近距离交易,适用于交换财务信息或敏感的个人信息等重要数据;蓝牙能够弥补NFC通信距离不足的缺点,适用于较长距离数据通信。因此,NFC和蓝牙互为补充,共同存在。事实上,快捷轻型的NFC协议可以用于引导两台设备之间的蓝牙配对过程,促进了蓝牙的使用。

  NFC是一种提供轻松、安全、迅速的通信的无线连接技术,其传输范围比RFID小,RFID的传输范围可以达到几米、甚至几十米,但由于NFC采取了独特的信号衰减技术,相对于RFID来说NFC具有距离近、带宽高、能耗低等特点。 其次,NFC与现有非接触智能卡技术兼容,目前已经成为得到越来越多主要厂商支持的正式标准。再次,NFC还是一种近距离连接协议,提供各种设备间轻松、安全、迅速而自动的通信。与无线世界中的其他连接方式相比,NFC是一种近距离的私密通信方式。最后,RFID更多的被应用在生产、物流、跟踪、资产管理上,而NFC则在门禁、公交、手机支付等领域内发挥着巨大的作用。

  现在刚兴起的NFC手机内置NFC芯片,组成RFID模块的一部分,可以当作RFID无源标签使用———用来支付费用;也可以当作RFID读写器———用作数据交换与采集。NFC技术支持多种应用,包括移动支付与交易、对等式通信及移动中信息访问等。通过NFC手机,人们可以在任何地点、任何时间,通过任何设备,与他们希望得到的娱乐服务与交易联系在一起,从而完成付款,获取海报信息等。NFC设备可以用作非接触式智能卡、智能卡的读写器终端以及设备对设备的数据传输链路,其应用主要可分为以下四个基本类型:用于付款和购票、用于电子票证、用于智能媒体以及用于交换、传输数据。

RFID
RFID(射频识别:radio frequency identification)是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,作为条形码的无线版本,RFID技术具有条形码所不具备的防水、防磁、耐高温、使用寿命长、读取距离大、标签上数据可以加密、存储数据容量更大、存储信息更改自如等优点,其应用将给零售、物流等产业带来革命性变化。

NFC  1. Supported tag technologies 

     TagTechnology NfcA NfcB NfcF NfcV IsoDep Ndef NdefFormatable 

     2. Optional supported tag technologies 

     MifareClassic MifareUltralight      

 详细内容 http://developer.android.com/intl/zh-cn/guide/topics/connectivity/nfc/advanced-nfc.html 
for example : MifareClassic
 //convert character sequence to hexadecimal 
     private String bytesToHexString(byte []src){ 
         StringBuilder stringBuilder = new StringBuilder("0x"); 
         if(src == null || src.length == 0){ 
             return null; 
         } 
         char[] buffer = new char[2]; 
         for (int i = 0; i < src.length; i++) { 
             buffer[0] = Character.forDigit((src[i] >>> 4) & 0x0F, 16); 
             buffer[1] = Character.forDigit(src[i] & 0x0F, 16); 
             Log.i(TAG, "bytesToHexString--->" + buffer); 
             stringBuilder.append(buffer); 
         } 
         Log.i(TAG, "StringBuilder--->" + stringBuilder.toString()); 
         return stringBuilder.toString(); 
     } 
      
     private void processIntent(Intent intent) { 
         //get the tag from intent 
         StringBuffer sbuffer = new StringBuffer(); 
         Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
         for (String tech : tagFromIntent.getTechList()) { 
             Log.i(TAG,"processIntent  tagFromIntent.getTechList()" + tech); 
             sbuffer.append(tech + "\n"); 
         } 
      
         //for example :MifareClassic 
         boolean auth = false; 
         MifareClassic mfc = MifareClassic.get(tagFromIntent); 
         String metaInfo = ""; 
         try { 
             mfc.connect(); 
             int type = mfc.getType();//obtain TAG's type 
             int sectorCount = mfc.getSectorCount();//obtain TAG's sectorCounts 
             String typeS = ""; 
             switch (type) { 
             case MifareClassic.TYPE_CLASSIC: 
                 typeS = "TYPE_CLASSIC"; 
                 break; 
             case MifareClassic.TYPE_PLUS: 
                 typeS = "TYPE_PLUS"; 
                 break; 
             case MifareClassic.TYPE_PRO: 
                 typeS = "TYPE_PRO"; 
                 break; 
             case MifareClassic.TYPE_UNKNOWN: 
                 typeS = "TYPE_UNKNOWN"; 
                 break; 
             } 
             metaInfo += "卡片类型:" + typeS + "\n共" + sectorCount + "个扇区\n共" 
                     + mfc.getBlockCount() + "个块\n存储空间:" + mfc.getSize() +"B\n"; 
      
             for (int i = 0; i < sectorCount; i++) { 
                 auth = mfc.authenticateSectorWithKeyA(i, MifareClassic.KEY_DEFAULT); 
                 int bCount; 
                 int bIndex; 
                 if(auth){ 
                     metaInfo += "Sector" + i + ":验证成功\n"; 
                     bCount = mfc.getBlockCountInSector(i); 
                     bIndex = mfc.sectorToBlock(i); 
                     for (int j = 0; j < bCount; j++) { 
                         byte[] data = mfc.readBlock(bIndex); 
                         metaInfo += "Block" + bIndex + ":" 
                                     + bytesToHexString(data) + "\n"; 
                         bIndex ++; 
                     } 
                 }else { 
                 //    metaInfo += "Sector" + i +":验证失败\n"; 
                 } 
             } 
             Log.i(TAG,"NFC-->metaInfo--:" + metaInfo); 
             promt_dialog.setText(sbuffer.append(metaInfo)); 
         } catch (Exception e) { 
             e.printStackTrace(); 
         }finally{ 
             try{ 
                 mfc.close(); 
             }catch (IOException e){ 
                 e.printStackTrace(); 
             }     
         } 
     }